Gridsplitter игнорирует минимальную ширину столбцов

Я хочу иметь простую 3-х столбчатую сетку с изменяемыми размерами столбцами и MinWidth 80.

Код выглядит следующим образом:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="120" MinWidth="80"/>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="*" MinWidth="80"/>
    <ColumnDefinition Width="Auto"/>
    <ColumnDefinition Width="120" MinWidth="80"/>
  </Grid.ColumnDefinitions>
  <GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center" />
  <GridSplitter Grid.Column="3" Width="5" HorizontalAlignment="Center" />
</Grid>

Но это не работает так, как я хочу и ожидаю. Когда сплиттеры сдвигаются влево, все работает нормально. Когда второй сплиттер сдвинут вправо, все работает нормально. Но если первый сплиттер сдвинут вправо, он выталкивает третий столбец и второй сплиттер из сетки (или делает их шириной = 0).

Я использовал отдельные столбцы для gridsplitters, как это было сделано в примере msdn:

<Grid.ColumnDefinitions>
  <ColumnDefinition/>
  <ColumnDefinition Width="Auto" />
  <ColumnDefinition/>
</Grid.ColumnDefinitions>
...
<GridSplitter Grid.Column="1"
      HorizontalAlignment="Center"
      VerticalAlignment="Stretch"
      Background="Black" 
      ShowsPreview="True"
      Width="5"
      />

Я также устанавливаю выравнивание в центр, так как я читаю, что правильное выравнивание может быть проблемой и попробовал разные ResizeBehaviors.

Кто-нибудь знает, как исправить эту проблему, чтобы все три столбца были видны с шириной не менее 80 пикселей?

Спасибо за любую помощь

Ответ 1

Попробуйте это вместо трех столбцов с минимальной шириной, равной 80. Вместо указания точной ширины при использовании gridsplitters используйте *.

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" MinWidth="80" />
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="*" MinWidth="80"/>
            <ColumnDefinition Width="5"/>
            <ColumnDefinition Width="*" MinWidth="80"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" Text="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self}}" />
        <GridSplitter Grid.Column="1"  VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Red" />
        <TextBlock Grid.Column="2" Text="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self}}" />
        <GridSplitter Grid.Column="3"   VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="Red" />
        <TextBlock Grid.Column="4" Text="{Binding Path=ActualWidth, RelativeSource={RelativeSource Self}}" />
    </Grid>
</ScrollViewer>