WPF: привязка высоты компонента к чужой
В окне есть Grid
, который содержит RadioButton
, a TextBox
и a Button
, каждый в столбцах 0, 1, 2 соответственно. Все они имеют свои высоты, установленные на авто.
Затем в другой части окна у меня есть еще один Grid
с Label
, a TextBox
и a Button
, в столбцах 0, 1 и 2. Высота также устанавливается в auto.
Проблема заключается в том, что первая высота сетки меньше, чем вторая. Я думаю, это потому, что Label заставляет второй повышать. Как я могу сделать это так, чтобы первая сетка была такой же высокой, как вторая? Я попытался сделать это:
Назовите текстовое поле во второй сетке SomeName.
В <Grid.ColumnDeclarations>
первой сетки я изменил Height с "auto" на "{Binding ElementName = SomeName, Path = Height}".
Но это не делало то, что я хотел. Размер был тот же. Я предполагаю, что привязка в основном получает "авто" и бросает ее туда, что заканчивается тем же.
Кроме того, я ищу решение, которое не требует установки высот в фиксированное значение.
Ответы
Ответ 1
Поместите две сетки в общий размер области и используйте 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>
См. также Как распределить свойства размера между сетками в MSDN.
Ответ 2
Привяжите свойство ActualHeight
, а не свойство Height
:
<RowDefinition Height="{Binding ActualHeight, ElementName=otherTextBox}" />