2016-04-28 70 views
1

我有一個像Viewport一樣工作的WPF UserControl(我在以下上下文中將其稱爲「視口」)。該視口可以縮放和平移其內容(我認爲縮放使用Layout或RenderTransform來縮放內容)。基本上內容只是一個畫布。這個畫布包含一些形狀和一些文本框,用於顯示形狀的元數據。 如果縮放係數爲1,那麼所有內容都很好,但如果我縮小,畫布會縮小,並且還會導致元數據無法讀取,因爲文本太小。縮放父母中的非縮放控件

如何強制TextBoxes進行反變焦,以便它們不會在屏幕上改變大小?

我曾想過將視口的變換(導致縮放)傳遞給文本框(以某種方式)並將其反轉應用於它們,但這對我來說似乎是錯誤的。 另一個問題是使用包含TextBoxes的Adorner。我發現一個關於Adorners控件的主題here on Stackoverflow但我不確定這個問題是否比另一個更好。

所以如果有人得到了更好的解決方案,我將不勝感激。

在此先感謝

回答

1

有一個Transform.Inverse屬性,您可以使用「撤銷」你的父母控件的轉換。所以你基本上把你的父控件綁定到MyTransform,並把所有的子控件綁定到MyTransform.Inverse。這樣,變換適用於兒童的位置,但不是它們的大小。

我同意它「感覺不對」,但我很確定這是您的最佳選擇。

+1

問題是應該縮放視口的內容。但內容的內容不應該縮放。我通過創建一個用作數據上下文的類來解決它。這個類擁有一個存儲代表規模的double的屬性。該視口具有屬性「ContentScale」和相應的更改事件。所以基本上我將ContentScale綁定到我的數據上下文,該數據上下文再次綁定到應該未縮放的控件。在控制中,我將double轉換爲ScaleTransform(1和ContentScale for x和y)。 – Timo

+0

我想我正確地理解了你 - 綁定到你的父變換的反向屬性應該給你與你現在正在做的手動完全相同的效果。除了您明確應用ViewPort.RenderTransform.Inverse的所有子項之外,視口內的所有內容都將按預期繼續縮放。無論如何,很高興你的工作。 – wilford

+0

是綁定變換會讓事情變得更容易,但正如我所說,我不太確定是否其中一個變換實際上被使用並且視口是黑盒子。但是,謝謝你的幫助。 – Timo