WPF: привязка высоты компонента к чужой - PullRequest
22 голосов
/ 10 февраля 2010

У меня в окне есть Grid, который содержит RadioButton, TextBox и Button, каждый в столбце 0, 1, 2 соответственно. Все они имеют высоту, установленную на авто.

Затем, в другой части окна, у меня есть еще Grid с Label, TextBox и Button, в столбцах 0, 1 и 2. Высота также установлена ​​на auto.

У меня проблема в том, что высота первой сетки меньше, чем у второй. Я думаю, это потому, что Лейбл заставляет второго быть выше. Как я могу сделать так, чтобы первая сетка была такой же высокой, как и вторая? Я пытался сделать это:

Назовите текстовое поле во второй сетке SomeName.
В <Grid.ColumnDeclarations> первой сетки я изменил высоту с «auto» на «{Binding ElementName = SomeName, Path = Height}».

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

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

Ответы [ 2 ]

41 голосов
/ 10 февраля 2010

Привязка к ActualHeight, а не Height свойству:

<RowDefinition Height="{Binding ActualHeight, ElementName=otherTextBox}" />
9 голосов
/ 10 февраля 2010

Поместите две сетки в область общего размера и используйте 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.

...