2014-07-17 47 views
2

我想在WPF數據模板的網格中創建3行。第一個設置爲高度=自動,第二個填充可用空間,第三個等於第一個。我嘗試綁定到elementname,但似乎並不工作WPF將RowDefinition.Height屬性綁定到另一個在DataTemplate中具有Height = Auto的RowDefinition

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" x:Name="definition" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="{Binding ElementName=definition, Path=ActualHeight}" /> 
    </Grid.RowDefinitions> 

    <TextBox Grid.Row="0" Height="100" /> 
</Grid> 

在這個例子中,我希望第三行的高度也是100px。有什麼建議麼?

+0

汽車是指適合內容....你還沒有加入控制內容ROW0所以它的ActualHeight是0這裏。 –

回答

3

試試這個:

<Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <Grid Height="100" Background="Red" x:Name="definition"/> 
    <Grid Background="Green" Grid.Row="1"/> 
    <Grid Background="Blue" Grid.Row="2" Height="{Binding ElementName=definition, Path=ActualHeight}"/> 
</Grid> 
3

RowDefinition.ActualHeight不是一個實際的依賴項屬性,這意味着您的綁定將不會得到任何關於ActualHeight被更改的「更新」。

你可以按照這個模式:

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto" /> 
    <RowDefinition Height="*" /> 
    <RowDefinition Height="{Binding ElementName=FirstRow, Path=ActualHeight}" /> 

    <Grid Grid.Row="0" x:Name="FirstRow" /> 
    <Grid Grid.Row="1" x:Name="SecondRow" /> 
    <Grid Grid.Row="2" x:Name="ThirdRow" /> 
</Grid.RowDefinitions> 

這個理論上應該工作的原因,很簡單:RowDefinition.ActualHeight == FirstRow.ActualHeight(默認情況下它應該填充可用空間)

或者,只是偷RowDefinition和也許創建自己的CustomRowDefinition,它可以實現依賴項屬性,名爲ActualHeight,並激發更新。

http://dotnetinside.com/in/type/PresentationFramework/RowDefinition/4.0.0.0

相關問題