如何在渲染之前获得Grid Row的实际高度

时间:2012-04-25 09:22:51

标签: c# .net wpf

在我的项目中有许多嵌套网格。并且大多数行和列宽度在XAML中定义为“*”。

我试图通过将其他行的高度设置为0来扩展特定行(比如说Row1),并且我使用.ActualHeight属性来获取Row1的宽度,然后它不给我实际高度。

据我所知,这是因为网格行和列的高度和宽度是在渲染时设置的。
我在网上搜索,有人建议使用UpdateLayout()方法..但这也不适合我 我无法发布代码段,因为代码很长 我的项目在c#.net wpf。

2 个答案:

答案 0 :(得分:5)

您需要进行完整的布局更新,即需要调用Measure,Arrange和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是一个FrameworkElement(Grid是一个)。

答案 1 :(得分:0)

基于狒狒帖子的解决方案为我工作。我需要为折叠的FrameworkElement滑动动画,不知道ActualHeight值的类似问题。

    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);

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