-1

とをGrid変更した後、レイアウト内の要素のサイズが必要です。およびプロパティは、レンダリングされたサイズを反映しません。ColumnSpanRowSpanActualWidthActualHeight

<Window x:Class="SizeTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" KeyDown="OnKeyDown">
<Grid Name="grid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Label Name="testElement" Content="Test" Background="Red" Grid.Row="0" Grid.Column="0" Grid.RowSpan="1" Grid.ColumnSpan="1" />
</Grid>

private void OnKeyDown(object sender, KeyEventArgs e)
{
    var w1 = testElement.ActualWidth;
    var h1 = testElement.ActualHeight;

    Grid.SetColumnSpan(testElement, 2);
    Grid.SetRowSpan(testElement, 2);

    var w2 = testElement.ActualWidth;
    var h2 = testElement.ActualHeight;

    MessageBox.Show(string.Format("Initial size: {0}x{1}\nNew size: {2}x{3}", w1, h1, w2, h2));
}

出力: 初期サイズ: 285.5x160 新しいサイズ: 285.5x160

4

2 に答える 2

1

ActualWidthグリッドのレイアウトが更新されるとActualHeight、正しい結果が得られます。したがってLayoutUpdated、グリッドまたは他の親要素のイベントでその 2 つのプロパティを取得する必要があります。

于 2012-08-04T12:45:24.963 に答える
1

Grid.UpdateLayout メソッド ActualWidthを呼び出した後ActualHeight、新しい値が反映されます。

Grid.SetColumnSpan(testElement, 2);
Grid.SetRowSpan(testElement, 2);
grid.UpdateLayout()
于 2012-08-04T12:47:43.353 に答える