2010-08-31 10 views
10

Я хочу иметь простую сетку 3 колонки с Resizeable колоннами и MinWidth 80.GridSplitter игнорирует MinWidth столбцов

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

<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 пикселей?

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

ответ

16

Попробуйте вместо трех столбцов, которые имеют MinWidth набор 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> 
+0

Это лишнее пространство, когда размер столбца 5 или 3 больше, чем его минимальная ширина. , , –