Gridsplitter игнорирует минимальную ширину столбцов - PullRequest
11 голосов
/ 31 августа 2010

Я хочу иметь простую сетку из 3 столбцов с изменяемыми размерами столбцов и минимальной шириной 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>

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

Я использовал отдельные столбцы для сплиттеров сетки, как это былосделано в примере с 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.

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

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

1 Ответ

19 голосов
/ 31 августа 2010

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

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