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

时间:2011-04-18 18:22:05

标签: c# wpf vb.net

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

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

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

感谢

编辑:
一些细节

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

6 个答案:

答案 0 :(得分:1)

将控件置于容器内(如ContentControl)并折叠容器而不是控件本身。然后,您应该只需在控件上调用Measure(或使用DesiredSize属性)即可确定需要多少空间。

答案 1 :(得分:0)

您期望得到什么尺寸?

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

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

修改

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

  

我的网格中有2列   窗口,第1列包含一个选项卡   控制,第二列a持有   扩展器控制。我想延长   扩展时我的窗口宽度   扩展器控制,所以内容在   第一列将保持其大小。

我的回答:

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

答案 2 :(得分:0)

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

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

如果您认为某些内容没有在合适的时间调整大小,您可以为某个事件添加处理程序,然后调用control.InvalidateVisual()control.InvalidateMeasurement(),这将使其通过一个全新的布局传递。< / p>

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

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

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