2010-02-09 90 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

相關問題