2

Gridaに a に2 つの境界線がありUserControlます。最初の境界は行 1 にあり、2 番目の境界は行 2 にあります。

<UserControl>
    <Grid Height="100">
        <Grid.RowDefinitions>
            <RowDefinition Height="{Binding RowOneLength}" />
            <RowDefinition Height="{Binding RowTwoLength}" />
        </Grid.RowDefinitions>  

        <Border x:Name="Border1" Grid.Row="0">                       
        </Border>
        <Border x:Name="Border2" Grid.Row="1">                       
        </Border>
    </Grid>
</UserControl>

境界線の高さも行の高さに収まるように、値を行定義に動的にバインドしています。

ViewModel からこのオブジェクトを作成し、UserControlそのコード ビハインドでメソッドを呼び出すと、境界線の元の高さが得られず (私が期待するのは、私が指定した値です)、両方の境界線のグリッドの高さの半分の長さを示しています。しばらくすると、境界線のサイズが期待どおりに変更されます。

最初から正しい値を取得したい。この動作を実現するにはどうすればよいですか?

public void SetImagesForNewPattern(int val1, int val2)
{
    this.Loaded += (sender, e) =>
    {
         var len1 =  Border1.ActualHeight+Border1.ActualWidth;
         var len2 =  Border2.ActualHeight+Border2.ActualWidth;               
    }
}

これは私のコードビハインドメソッドです。このメソッドは my から呼び出されますViewModel。境界SizeChangedイベントの後でのみ、正確な実際の幅と高さを取得しています。

4

1 に答える 1

1

このmsdnの記事によると、イベントが発生したときにaUserControlは最終的にレンダリングされません。Loaded

またはインスタンスのSizeChangedイベントを使用できますが、測定およびレンダリング中にサイズが変更されるため、値を数回再計算することを意味します。UserControlBorderUserControl

于 2013-01-08T10:51:38.817 に答える