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 メソッドでクエリされます。これは、50 ミリ秒ごとに BackgroundWorker によって呼び出されますが、おそらく違いがあります。

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 に答える