将其粘贴到Cider中。
<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,但不应该,对吧?解决办法:
答案 0 :(得分:6)
不,你没有。实际上,ColumnDefinition确实具有ActualWidth
属性。但它既不是DependencyProperty
也不是INotifyPropertyChanged
实现。因此,在ActualWidth
更新时,没有人知道您的目标。
解决方法?为了什么?您始终可以使用ElementName
绑定到父FrameworkElement
,而该ActualWidth
具有您想要的{{1}}。抱歉复杂的短语:)。无法简化。
希望这有帮助。
答案 1 :(得分:3)
ColumnDefinition.ActualWidth
属性不是依赖项属性,绑定只会显示它的初始值,即在为布局更新网格之前为0。另一方面,Grid.ActualWidth
属性是依赖属性,绑定将随宽度的变化而更新。
答案 2 :(得分:2)
添加或删除行或列时,所有ColumnDefinition元素的ActualWidth和所有RowDefinition元素的ActualHeight在调用Measure之前都会变为零。
似乎在以某种方式调用Measure
之前绑定了值。尝试强制绑定Mode = OneWay
,并在代码中手动检查,以确认此行为。