动态绑定边框时,边框的ActualHeight/ActualWidth与预期不同



我在GridUserControl中有两个边界。第一个边界在第一行,第二个边界在第二行。

<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;               
    }
}

这是我的代码隐藏方法。这个方法是从我的ViewModel调用的。我得到了确切的实际宽度&仅在边界SizeChanged事件之后的高度。

根据这篇msdn文章,在引发Loaded事件时,不会最终呈现UserControl

您可以使用UserControlBorder实例的SizeChanged事件,但这意味着在测量和渲染UserControl期间,由于大小会发生变化,因此需要多次重新计算该值。

最新更新