2

我正在尝试在 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 方法中查询列值,该方法由 BackgroundWorker 每 50 毫秒调用一次,这可能会有所不同。

4

3 回答 3

4

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

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

因此,您可能可以Measure手动调用或尝试等待它。

于 2012-08-30T16:27:50.500 回答
1

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

于 2012-08-30T16:06:35.733 回答
0

尝试BallGrid.RenderSize.HeightBallGrid.RenderSize.Width

于 2012-08-30T16:02:38.077 回答