2009-09-28 26 views
2

將其粘貼到蘋果酒中。綁定到ColumnDefinition.ActualWidth將返回0

<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,但不應該,對不對?解決方法?

回答

2

the MSDN page

當您添加或刪除的行或列中,ActualWidth的所有ColumnDefinition元素和所有RowDefinition元素的ActualHeight變爲零,直到測量被調用。

似乎在調用Measure之前,該值被以某種方式綁定。嘗試強制綁定Mode = OneWay,並在代碼中手動檢查以確認此行爲。

+0

Umm:http://msdn.microsoft.com/en-us/library/system.windows.controls.columndefinition.actualwidth.aspx – 2009-09-28 16:24:11

5

不,你沒有。實際上,ColumnDefinition確實具有ActualWidth屬性。但它既不是DependencyProperty也不是INotifyPropertyChanged的實現。所以當ActualWidth更新時,沒有人讓你的目標知道。

解決方法?爲了什麼?您始終可以使用ElementName綁定到父母FrameworkElement,他們完全符合您想要的ActualWidth。對不起,複雜的短語:)。不能讓它變得更簡單。

希望這會有所幫助。

+0

當然,我試圖在一個更大的網格中使用它,並且有幾列。這只是一個示範。 – CannibalSmith 2009-09-28 16:32:52

1

ColumnDefinition.ActualWidth屬性不是一個依賴項屬性,您綁定將只顯示它的初始值是0之前網格已更新佈局。另一方面,Grid.ActualWidth屬性是一個依賴項屬性,綁定將隨寬度更改而更新。