2010-02-09 143 views
20

我在窗口中分别包含RadioButtonTextBoxButton,分别在第0,1,2列中的Grid。他们都有自己的高度设置为自动。WPF:将组件的高度绑定到另一个组件的高度

然后,在窗口的另一部分,我有另一个GridLabel,一个TextBoxButton,在1列0,...,和2高地也被设置为自动。

我遇到的问题是第一个网格的高度比第二个网格的高度小。我想这是因为Label迫使第二个更高。我怎样才能使第一格与第二格一样高呢?我试着这样做:

命名第二个网格SomeName中的文本框。
在第一个Grid的<Grid.ColumnDeclarations>中,我将Height从“auto”更改为“{Binding ElementName = SomeName,Path = Height}”。

但这并没有做我想要的。大小是一样的。我想绑定基本上是“自动”并将它扔到那里,结果是同样的事情。

此外,我正在寻找一种不涉及将高度设置为固定值的解决方案。

回答

9

放在一个shared size scope两个网格,并使用SharedSizeGroup到行高度锁在一起:在

<SomeContainer Grid.IsSharedSizeScope="True"> <!-- Could be the Window or some more nearby Panel --> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition SharedSizeGroup="LabelAndRadioButtonGroup" /> 
    </Grid.RowDefinitions> 
    <Label Grid.Row="0" /> 
    </Grid> 
    <Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition SharedSizeGroup="LabelAndRadioButtonGroup" /> 
    </Grid.RowDefinitions> 
    <RadioButton Grid.Row="0" /> 
    </Grid> 
</SomeContainer> 

参见How to: Share sizing properties between grids MSDN。

35

绑定到ActualHeight而非Height属性:

<RowDefinition Height="{Binding ActualHeight, ElementName=otherTextBox}" /> 
+0

这也没有工作。我得到它的唯一方法是添加一个标签并隐藏它。哎呀。 – zxcvbnm 2010-02-09 22:32:02

+0

好奇。在发布之前,我测试了它,尽管使用了TextBlock而不是TextBox。也许是由网格添加的边距问题(我想绑定到另一个RowDefinition的ActualHeight以避免这个问题,但这不起作用)。 – itowlson 2010-02-09 22:45:40

+1

这实际上是正确的答案。 – Cogent 2017-04-12 10:57:44