WPF - GridSplitter с тремя столбцами

У меня есть приложение с сеткой из 3 столбцов. Разделитель сетки между первым и вторым столбцами работает просто отлично. Чтобы разделитель находился между вторым и третьим столбцами, я создал столбец для разделителя. (Так что теперь третий столбец - действительно четвертый.)

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

Вот пример XAML Pad Ready моей проблемы. Вставьте это в панель XAML и попробуйте изменить размер последнего столбца, чтобы он был меньше.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <StackPanel Background="#feca00" Grid.Column="0">
            <TextBlock FontSize="35" Foreground="#58290A"
                   TextWrapping="Wrap">Left Hand Side</TextBlock>
        </StackPanel>
        <GridSplitter Width="10" />
        <Border CornerRadius="10" BorderBrush="#58290A"
              BorderThickness="5" Grid.Column="1">
            <TextBlock FontSize="25" Margin="20" Foreground="#FECA00"
                   TextWrapping="Wrap">Right Hand Side</TextBlock>
        </Border>
        <GridSplitter Grid.Column="2" HorizontalAlignment="Right"  VerticalAlignment="Stretch" Width="5"></GridSplitter>
        <TabControl Grid.Column="3" Name="tabControl1">
            <TabItem Header="Add Links" Name="tabAddLinks">
                <Grid></Grid>
            </TabItem>
        </TabControl>
    </Grid>
</Page> 

Спасибо за помощь!


РЕДАКТИРОВАТЬ: было предложено, чтобы оба разделителя в своих собственных столбцах могли исправить это. Я попробовал это, и теперь первый сплиттер также сжимает столбцы, как второй сплиттер.

Вот код XAML Pad для этого примера:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <StackPanel Background="#feca00" Grid.Column="0">
            <TextBlock FontSize="35" Foreground="#58290A"
                   TextWrapping="Wrap">Left Hand Side</TextBlock>
        </StackPanel>
        <GridSplitter Grid.Column="1" HorizontalAlignment="Right"  VerticalAlignment="Stretch" Width="5"></GridSplitter>
        <Border CornerRadius="10" BorderBrush="#58290A"
              BorderThickness="5" Grid.Column="2">
            <TextBlock FontSize="25" Margin="20" Foreground="#FECA00"
                   TextWrapping="Wrap">Right Hand Side</TextBlock>
        </Border>
        <GridSplitter Grid.Column="3" HorizontalAlignment="Right"  VerticalAlignment="Stretch" Width="5"></GridSplitter>
        <TabControl Grid.Column="4" Name="tabControl1">
            <TabItem Header="Add Links" Name="tabAddLinks">
                <Grid></Grid>
            </TabItem>
        </TabControl>
    </Grid>
</Page> 

3 ответа

Решение

Попробуйте установить HorizontalAlignment="Center" для обоих сплиттеров - понятия не имею, почему его установка на "Right" должна приводить к тому, что поведение становится таким странным, но изменение меня сработало:)

GridSplitter должен быть помещен в его собственный столбец в сетке. Я не уверен, что полностью понимаю вашу проблему, но я предлагаю вам попробовать создать Grid с 5 ColumnDefinitions. Используйте столбцы 1 и 2 для размещения GridSplitters и столбцы 0, 2 и 4 для содержимого.

В документе GridSplitter MSDN есть пример того, как это сделать.

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

У меня была аналогичная проблема с разделителями на 3 столбца, которые в какой-то момент неожиданно схлопывались при изменении размера. оказалось, что проблема связана с негативомMargin(Я сделал это для целей макета), но, видимо, это сбивает с толку систему, поэтому удаление отрицательного поля из разделителей сетки помогло мне.

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