簡體   English   中英

如何在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;

標記為答案的帖子實際上沒有回答問題,它只是提供了一種解決方法。

要獲得折疊控件的大小,您需要:

  1. 將控件的可見性設置為隱藏(折疊不會評估)。
  2. 呼叫測量(新大小(Double.PositiveInfinity,Double.PositiveInfinity))控制方法。
  3. 從控件的DesiredSize屬性中獲取大小。
  4. 然后你可以折疊你的控制。

你期望得到什么尺寸?

尺寸不僅取決於控制,還取決於其容器。 因此,除非實際呈現控件,否則無法確定實際大小。

而不是使用Collapsed,你可以通過它自己的邏輯和容器的邏輯來使它變得不可見。

編輯

在評論中,很清楚,需要控件大小的原因是什么:

我的窗口中有一個包含2列的網格,第1列包含選項卡控件,第2列包含擴展控件。 我想在擴展擴展器控件時擴展窗口的寬度,因此第1列中的內容將保持其大小。

我的答案:

將窗口的SizeToContent設置為WidthAndHeight,並將兩個網格列的寬度設置為auto。 那應該照顧它。

我相信你會以錯誤的方式解決這個問題。 您可以將窗口寬度和高度設置為"Auto" ,然后它將處理所有調整大小的內容。

只要你直接設置任何控件的Width屬性就會出現問題(相信我,我已經完成了)。 一旦你這樣做,你已經告訴WPF 手動調整邏輯,我知道我在做什么。

如果你認為某些東西沒有在正確的時間調整大小,你可以為某個事件添加一個處理程序,然后調用control.InvalidateVisual()control.InvalidateMeasurement() ,這將使它通過一個全新的布局傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM