3

将此粘贴到苹果酒中。

<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,但不应该,对吧?解决方法?

4

3 回答 3

7

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

解决方法?为了什么?您始终可以使用ElementName绑定到FrameworkElement具有ActualWidth您想要的东西的 parent 。对不起,复杂的短语:)。不能让它更简单。

希望这可以帮助。

于 2009-09-28T16:28:22.250 回答
4

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

于 2009-09-28T16:33:19.393 回答
2

MSDN 页面

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

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

于 2009-09-28T16:21:34.847 回答