如何在渲染之前获取网格行的实际高度

本文关键字:网格 高度 获取 | 更新日期: 2023-09-27 18:32:07

在我的项目中,有许多嵌套的网格。大多数情况下,行和列宽度在 XAML 中定义为"*"。

我正在尝试通过将另一行的高度设置为 0 来扩展特定行(假设 Row1),并且我正在使用 .实际高度属性来获取 Row1 的宽度,然后它没有给我实际高度。

据我所知,这种情况正在发生,因为网格行和列的高度和宽度是在渲染时间上设置的。
我在网上搜索,有人建议使用UpdateLayout()方法。但这对我也不起作用。
我不能发布代码片段,因为它是很长的代码。
我在 C#.NET WPF 中的项目。

如何在渲染之前获取网格行的实际高度

您需要进行完整的布局更新,即需要调用 Measure、Arrangement 和 UpdateLayout:

    //Make the framework (re)calculate the size of the element
    _Element.Measure(new Size(Double.MaxValue, Double.MaxValue));
    Size visualSize = _Element.DesiredSize;
    _Element.Arrange(new Rect(new Point(0, 0), visualSize));
    _Element.UpdateLayout();

_Element是一个框架元素(网格就是其中之一)。

基于狒

狒帖子的解决方案对我有用。我需要对折叠的框架元素的幻灯片进行动画处理,不知道实际高度值的类似问题是什么。

    element.Visibility = Visibility.Visible;
    element.InvalidateArrange();
    element.UpdateLayout();
    double elementHeight = element.DesiredSize.Height;
    DoubleAnimation animation = new DoubleAnimation(0, elementHeight, TimeSpan.FromMilliseconds(animMilisec));
    element.BeginAnimation(Rectangle.HeightProperty, animation);

现在在渲染元素之前,我可以访问它的最终高度;