Подтвердить что ты не робот

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}".

Но это не делало то, что я хотел. Размер был тот же. Я предполагаю, что привязка в основном получает "авто" и бросает ее туда, что заканчивается тем же.

Кроме того, я ищу решение, которое не требует установки высот в фиксированное значение.

4b9b3361

Ответ 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}" />