【问题标题】:ActualHeight / ActualWidth of Border is not as expected when binding it dynamically动态绑定时Border的ActualHeight/ActualWidth不符合预期
【发布时间】:2013-01-08 07:04:16
【问题描述】:

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 事件之后,我才能得到确切的实际宽度和高度。

【问题讨论】:

  • 什么时候执行后面的代码?当您执行代码时,可能没有完全呈现 UserControl。如果您将代码添加到您的问题中,这将很有帮助。
  • @MatthiasG 嗨,我用后面的代码更新了我的问题。如果您发现任何有助于回答的问题,请告诉我

标签: silverlight xaml windows-phone actualwidth actualheight


【解决方案1】:

根据this msdn articleUserControl 在引发Loaded 事件时最终不会呈现。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多