如何在WPF中获得折叠控件的宽度/高度
本文关键字:控件 高度 折叠 WPF | 更新日期: 2023-09-27 17:50:24
我想知道是否有一种简单的方法可以在运行时在WPF中获得控件的宽度,而控件是折叠的。
,当我使用控制。宽度将得到以下结果:-1.#IND和控制。actualWidth将返回0.0,因为它已折叠。
我想调整我的窗口大小,然后显示折叠的控件。
感谢编辑:
一些细节
我有一个网格与2列在我的窗口,第一列持有选项卡控件,第二列持有扩展器控件。我想扩展我的窗口的宽度时展开扩展器控件,所以在第一列的内容将保持其大小
将控件放入容器(如ContentControl
)中,并折叠容器而不是控件本身。然后,您应该能够简单地调用控件上的Measure
(或使用DesiredSize
属性)来确定它想要多少空间。
你希望得到多大的尺寸?
的大小不仅取决于控件,还取决于它的容器。因此,除非控件实际呈现,否则无法确定实际大小。
你可以把它设置为不可见,这样它就会根据自己的逻辑和容器的逻辑来调整大小。
编辑
在评论中,我们清楚地看到了需要控件大小的原因:
我有一个网格与2列在我的窗口中,第一列保存一个选项卡控件,第二列a保存an扩张器控制。我想扩展的窗口宽度展开器控件,使内容在第一列保持原来的大小。
我的回答:
设置窗口的SizeToContent为WidthAndHeight,并设置两个网格列的宽度为auto。这就够了。
我相信你处理这件事的方式是错误的。你可以设置窗口宽度和高度为"Auto"
,然后它会照顾所有的调整大小的东西。
当你直接设置任何控件的Width属性时,问题就出现了(相信我,我已经这样做了)。一旦你这样做了,你已经告诉WPF 放手调整逻辑,我知道我在做什么。
如果你认为有些东西没有在正确的时间调整大小,你可以给一些事件添加一个处理程序,然后调用control.InvalidateVisual()
或control.InvalidateMeasurement()
,这将使它通过一个全新的布局通过
您必须调用控件或控件容器上的UpdateLayout
方法。之后,事情可能会正常工作。
在UWP中,您可以通过使其可见一秒钟然后再次隐藏它来确定折叠控件的大小,更改是不明显的:
var oldVisibility = myBorder.Visibility;
myBorder.Visibility = Visibility.Visible;
myBorder.UpdateLayout();
var height = myBorder.RenderSize.Height;
myBorder.Visibility = oldVisibility;
标记为答案的帖子实际上不回答问题,它只是提供了一个解决方案。
要获取折叠控件的大小,您需要:
- 设置控件的可见性为隐藏(折叠后不会计算)。
- Call Measure(new Size) 控件的PositiveInfinity, Double.PositiveInfinity))方法。
- 从控件的DesiredSize属性中获取大小
- 然后你可以把你的控件折叠回来