【问题标题】:Binding to ColumnDefinition.ActualWidth returns 0绑定到 ColumnDefinition.ActualWidth 返回 0
【发布时间】:2009-09-28 16:17:20
【问题描述】:

将其粘贴到苹果酒中。

<Grid x:Name="Grid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition x:Name="ColumnDefinition"/>
    </Grid.ColumnDefinitions>
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
        <TextBlock Text="{Binding ActualWidth, ElementName=Grid}"/>
        <TextBlock Text="{Binding ActualWidth, ElementName=ColumnDefinition}"/>
    </StackPanel>
</Grid>

现在,运行它。第二个 TextBlock 显示 0,但不应该,对吧?解决方法?

【问题讨论】:

    标签: wpf xaml binding grid actualwidth


    【解决方案1】:

    不,你没有。实际上,ColumnDefinition 确实有一个 ActualWidth 属性。但它既不是 DependencyProperty 也不是 INotifyPropertyChanged 实现。所以当ActualWidth 更新时,没有人会让你的目标知道。

    解决方法?为了什么?您始终可以使用ElementName 绑定到父FrameworkElement,后者正是您想要的ActualWidth。对不起,复杂的短语:)。再简单不过了。

    希望这会有所帮助。

    【讨论】:

    • 当然,我正在尝试在具有几列的更大网格中使用它。这只是一个演示。
    【解决方案2】:

    ColumnDefinition.ActualWidth 属性不是依赖属性,您的绑定只会显示它的初始值,即在为布局更新网格之前为 0。另一方面,Grid.ActualWidth 属性是一个依赖属性,绑定会随着宽度的变化而更新。

    【讨论】:

    • 同意。当我给 ColumnDefinition 一个名称和 sub-UserControl 一个名称,然后在 Loaded 事件中分配“subUserControl.ParentColumnWidth = colDefName.ActualWidth;”时,它起作用了
    【解决方案3】:

    来自the MSDN page

    当您添加或删除行或列时,所有 ColumnDefinition 元素的 ActualWidth 和所有 RowDefinition 元素的 ActualHeight 变为零,直到调用 Measure。

    似乎在调用Measure 之前绑定了值,不知何故。尝试在您的绑定上强制 Mode = OneWay,并手动检查代码,以确认此行为。

    【讨论】:

    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多