我试图以编程方式获取网格的宽度和高度,在UserControl中。
这是我的XAML
网格:
<Grid Name="BallGrid" Background="DarkBlue" Height="auto" Width="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
</Grid>
但是这两个:
double width = BallGrid.ColumnDefinitions[0].ActualWidth;
double height = BallGrid.RowDefinitions[0].ActualHeight;
返回0,
和这些
double width = BallGrid.ColumnDefinitions[0].Width.Value;
double height = BallGrid.RowDefinitions[0].Height.Value;
返回两个返回1。
我想知道实际的宽度,最好是与边距大小相同的单位。如何以编程方式获取这些值?
在ProgessChanged方法中查询列值,每隔50毫秒由BackgroundWorker调用,这可能会产生影响。
答案 0 :(得分:4)
通常您使用ActualWidth
/ Height
,这些属性有点懒惰:
添加或删除行或列时,所有ActualWidth元素的ColumnDefinition和所有RowDefinition元素的 ActualHeight 将变为零,直到{{3调用。
所以你可以手动调用Measure
或尝试等待它。
答案 1 :(得分:1)
源初始化后它们有效。您可以覆盖OnSourceInitialized
以了解何时发生。
答案 2 :(得分:0)
尝试BallGrid.RenderSize.Height
和BallGrid.RenderSize.Width