Установить максимальную высоту элемента управления на основе высоты других элементов управления (используя CalcBinding)

У меня есть TextBlock и три Gridс, содержащиеся внутри другого Grid, Каждая внутренняя сетка содержит TextBlock в первом ряду и DataGrid во-вторых. Данные в сетках данных имеют переменное количество записей.

<Grid Name="gridOuter">
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />  // <-- x3 
    ...
  </Grid.RowDefinitions>

  <TextBlock Grid.Row="0" Text="Contents" />

  <Grid Grid.Row="1" Name="innerOne" MinHeight="50" MaxHeight="???">
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto" />
      <RowDefinition Height="*" />
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0">Heading One</TextBlock>
    <ScrollViewer Grid.Row="1">
      <DataGrid Name="dataGridOne">
        <DataGridColumns> 
          <DataGridTextColumn Header="Title" Binding="{Title}" /> 
          <DataGridTextColumn Header="Description" Binding="{Description}" /> 
        <DataGridColumns> 
      </DataGrid>
    </ScrollViewer>
  </Grid>
  ...
  <!-- x2 more with Grids named innerTwo and innerThree, with contained
       DataGrids named dataGridTwo and dataGridThree, respectively
  -->

</Grid>

Я хочу установить MaxHeight каждой из внутренних сеток, чтобы равняться ActualHeight внешней сетки, минус сумма MinHeightс двух других внутренних сеток.

Я использую CalcBinding, но я открыт для любого другого решения.

Я надеюсь, что смогу сделать что-то вроде:

MaxHeight="{cb:Binding ActualHeight, ElementName=gridOuter
         - (cb:Binding MinHeight, ElementName=dataGridTwo 
           + cb:Binding MinHeight, ElementName=dataGridThree)}"

Возможно ли это с CalcBinding, и если да, то каков правильный синтаксис, если нет, то возможен ли другой путь?

0 ответов

Другие вопросы по тегам