我有一個ScrollViewer內的畫布。我想要做的是調整畫布的大小,使它可以填充ScrollViewer或包含其子元素 - 以較大者爲準。我所面臨的挑戰是,Canvas中的MeasureOverride總是被稱爲無窮大 - 我認爲這是有道理的(它在一個卷軸中,因此它可以是任何大小)。所以,雖然我知道畫布需要多少空間兒童,我不知道我的父母有多大 - 所以我不能返回最小尺寸(填充滾動視口)WPF畫布在ScrollViewer大小適合
任何見識將是最受歡迎的。
感謝
我有一個ScrollViewer內的畫布。我想要做的是調整畫布的大小,使它可以填充ScrollViewer或包含其子元素 - 以較大者爲準。我所面臨的挑戰是,Canvas中的MeasureOverride總是被稱爲無窮大 - 我認爲這是有道理的(它在一個卷軸中,因此它可以是任何大小)。所以,雖然我知道畫布需要多少空間兒童,我不知道我的父母有多大 - 所以我不能返回最小尺寸(填充滾動視口)WPF畫布在ScrollViewer大小適合
任何見識將是最受歡迎的。
感謝
我所做的是綁定Canvas
到ActualHeight
S中ScrollViewer
的Height
和MinHeight
和Canvas'
內容。
由於Canvas
的Height
只應ScrollViewer
的Height
當內容的高度不,是有意義的這個設置爲Canvas
的MinHeight
。
<ScrollViewer Name="YourScrollViewer">
<Canvas Height="{Binding ElementName=YourContent, Path=ActualHeight}" MinHeight="{Binding ElementName=YourScrollViewer, Path=ActualHeight}">
<StackPanel Name="YourContent"/>
</Canvas>
</ScrollViewer>
感謝您的建議。不確定它在我的情況下很有效。我的畫布內容是一些Visual對象(在代碼中創建),所以我需要以編程方式計算它們的邊界等。我的畫布也可以縮放 - 實際上我想確保它實際上是滾動視口的倍數(因此總是有滾動的餘量) – Scotty
你可以在'MinHeight'上使用轉換器進行綁定以獲得倍數。對於'高度'我建議循環你的集合,並使用'Canvas.GetTop(Element)+ Element.ActualHeight'來獲得最大值,創建一個屬性來存儲這個然後綁定到'Height'上 – Blinx
I'已經提出了一些黑客解決方案。我重寫ScrollViewer中的MeasureOverride並緩存約束大小,然後在Canvas上調用.Measure。在Canvas的MeasureOverride中,我然後返回父ScrollViewer緩存的約束大小(針對我的內容大小和任何縮放比例進行調整)似乎工作!? – Scotty
您可以將'MinHeight'綁定到'ScrollViewer'的'Height'。例如'' – Blinx