以编程方式获取当前列宽和高度?

时间:2012-08-30 15:53:03

标签: c# wpf xaml grid

我试图以编程方式获取网格的宽度和高度,在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调用,这可能会产生影响。

3 个答案:

答案 0 :(得分:4)

通常您使用ActualWidth / Height,这些属性有点懒惰:

  

添加或删除行或列时,所有ActualWidth元素的ColumnDefinition和所有RowDefinition元素的 ActualHeight 将变为零,直到{{3调用。

所以你可以手动调用Measure或尝试等待它。

答案 1 :(得分:1)

源初始化后它们有效。您可以覆盖OnSourceInitialized以了解何时发生。

答案 2 :(得分:0)

尝试BallGrid.RenderSize.HeightBallGrid.RenderSize.Width