![](/img/trans.png)
[英]How to adjust control width and height according to windows width and height in WPF
[英]How to get the Width/Height of a collapsed control in WPF?
我想知道在控件崩潰時是否有一種簡單的方法可以在運行時獲取WPF中控件的寬度。
當我使用control.Width ill得到以下結果:-1。#IND和control.actualWidth將返回0.0,因為它已折疊。
我想調整窗口大小,然后顯示折疊控件。
謝謝
編輯:
一些細節
我的窗口中有一個包含2列的網格,第1列包含選項卡控件,第2列包含擴展控件。 我想在擴展擴展器控件時擴展窗口的寬度,因此第1列中的內容將保持其大小。
將控件置於容器(如ContentControl
)中並折疊容器而不是控件本身。 然后你應該能夠簡單地在控件上調用Measure
(或使用DesiredSize
屬性)來確定它想要多少空間。
您必須在控件或控件的conainer上調用UpdateLayout
方法。 在那之后,事情可能正常。
在UWP中,您可以通過使其在一秒內可見並再次隱藏它來確定折疊控件的大小,更改不明顯:
var oldVisibility = myBorder.Visibility;
myBorder.Visibility = Visibility.Visible;
myBorder.UpdateLayout();
var height = myBorder.RenderSize.Height;
myBorder.Visibility = oldVisibility;
標記為答案的帖子實際上沒有回答問題,它只是提供了一種解決方法。
要獲得折疊控件的大小,您需要:
你期望得到什么尺寸?
尺寸不僅取決於控制,還取決於其容器。 因此,除非實際呈現控件,否則無法確定實際大小。
而不是使用Collapsed,你可以通過它自己的邏輯和容器的邏輯來使它變得不可見。
編輯
在評論中,很清楚,需要控件大小的原因是什么:
我的窗口中有一個包含2列的網格,第1列包含選項卡控件,第2列包含擴展控件。 我想在擴展擴展器控件時擴展窗口的寬度,因此第1列中的內容將保持其大小。
我的答案:
將窗口的SizeToContent設置為WidthAndHeight,並將兩個網格列的寬度設置為auto。 那應該照顧它。
我相信你會以錯誤的方式解決這個問題。 您可以將窗口寬度和高度設置為"Auto"
,然后它將處理所有調整大小的內容。
只要你直接設置任何控件的Width屬性就會出現問題(相信我,我已經完成了)。 一旦你這樣做,你已經告訴WPF 手動調整邏輯,我知道我在做什么。
如果你認為某些東西沒有在正確的時間調整大小,你可以為某個事件添加一個處理程序,然后調用control.InvalidateVisual()
或control.InvalidateMeasurement()
,這將使它通過一個全新的布局傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.