在我的项目中有许多嵌套网格。并且大多数行和列宽度在XAML中定义为“*”。
我试图通过将其他行的高度设置为0来扩展特定行(比如说Row1),并且我使用.ActualHeight属性来获取Row1的宽度,然后它不给我实际高度。
据我所知,这是因为网格行和列的高度和宽度是在渲染时设置的。
我在网上搜索,有人建议使用UpdateLayout()方法..但这也不适合我
我无法发布代码段,因为代码很长
我的项目在c#.net wpf。
答案 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);
现在在渲染元素之前,我可以访问它的最终高度;