如何在WPF中获取折叠控件的宽度/高度?

我想知道在控件崩溃时是否有一种简单的方法可以在运行时获取WPF中控件的宽度。

当我使用control.Width ill得到以下结果:-1。#IND和control.actualWidth将返回0.0,因为它已折叠。

我想调整窗口大小,然后显示折叠控件。

谢谢

编辑:
一些细节

我的窗口中有一个包含2列的网格,第1列包含选项卡控件,第2列包含扩展控件。 我想在扩展扩展器控件时扩展窗口的宽度,因此第1列中的内容将保持其大小。

你期望得到什么尺寸?

尺寸不仅取决于控制,还取决于其容器。 因此,除非实际呈现控件,否则无法确定实际大小。

而不是使用Collapsed,你可以通过它自己的逻辑和容器的逻辑来使它变得不可见。

编辑

在评论中,很明显需要控件大小的原因是什么:

我的窗口中有一个包含2列的网格,第1列包含选项卡控件,第2列包含扩展控件。 我想在扩展扩展器控件时扩展窗口的宽度,因此第1列中的内容将保持其大小。

我的答案:

将窗口的SizeToContent设置为WidthAndHeight,并将两个网格列的宽度设置为auto。 那应该照顾它。

将控件置于容器(如ContentControl )中并折叠容器而不是控件本身。 然后你应该能够简单地在控件上调用Measure (或使用DesiredSize属性)来确定它想要多少空间。

我相信你会以错误的方式解决这个问题。 您可以将窗口宽度和高度设置为"Auto" ,然后它将处理所有resize的内容。

只要你直接设置任何控件的Width属性就会出现问题(相信我,我已经完成了)。 一旦你这样做,你已经告诉WPF 手动调整逻辑大小,我知道我在做什么。

如果你认为某些东西没有在正确的时间resize,你可以为某个事件添加一个处理程序,然后调用control.InvalidateVisual()control.InvalidateMeasurement() ,这将使它通过一个全新的布局传递。

您必须在控件或控件的conainer上调用UpdateLayout方法。 在那之后,事情可能正常。

在UWP中,您可以通过使其在一秒内可见并再次隐藏它来确定折叠控件的大小,更改不明显:

 var oldVisibility = myBorder.Visibility; myBorder.Visibility = Visibility.Visible; myBorder.UpdateLayout(); var height = myBorder.RenderSize.Height; myBorder.Visibility = oldVisibility; 

标记为答案的post实际上没有回答问题,它只是提供了一种解决方法。

要获得折叠控件的大小,您需要:

  1. 将控件的可见性设置为隐藏(折叠不会评估)。
  2. 调用控件(新尺寸(Double.PositiveInfinity,Double.PositiveInfinity))方法。
  3. 从控件的DesiredSize属性中获取大小。
  4. 然后你可以折叠你的控件。