如何在运行时获取WPF元素的尺寸而无需在编译时指定它们

3
问题是什么?
<UI:PanelBrowser Margin="12,27,12,32"></UI:PanelBrowser>

WPF 是荒谬的,如果不手动指定属性(例如宽度和高度),则会导致它们具有 Double.NaN 的值。问题是我需要知道这个数字。我不想在 XAML 中手动设置宽度和高度,因为那会阻止它重新调整大小。给定上述 XAML 片段(此对象是 Border 控件的简单子类),如何在运行时获取 Width 和 Height 属性的值?编辑:哇,我感到很荒谬。我读了关于 ActualWidth 和 ActualHeight 的信息,但它们对我来说始终返回 0 和 0。原因是在 Framework Element 的构造函数中测试了这些属性,而在实际初始化之前。希望这能帮助遇到相同问题的人,并纠正测试谬误。 :)
4个回答

14

2

WPF框架提供了两个DependencyProperties来获取渲染宽度和高度,它们分别是FrameworkElement.ActualWidthFrameworkElement.ActualHeight


1

您可以使用元素的 ActualWidthActualHeight 属性获取其绘制时的宽度和高度值。


0
使用 VisualTreeHelper.GetDescendantBounds(Visual Reference),它会返回一个 Rect。
然后检查该 Rect 的高度。
例如:
Rect bounds = VisualTreeHelper.GetDescendantBounds(element);
double height = bounds.height;

或者
使用 UIElement.Measure(Size size),它会将 Size 分配到 DesiredSize 中。
例如:

myElement.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));  
double height = myElement.DesiredSize.Height;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接