Ответ 1
Попробуйте установить HorizontalAlignment="Center"
для обоих сплиттеров - не знаю, почему для него значение "Вправо" должно привести к тому, что поведение будет настолько отвратительным, но изменение его сработало для меня:)
У меня есть приложение с сеткой с 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>
Спасибо за помощь!
EDIT: Было высказано предположение, что использование обоих разделителей в их собственных колоннах может исправить это. Я попробовал это, и теперь первый сплиттер также сжимает столбцы, как это делает второй сплиттер.
Вот код 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>
Попробуйте установить HorizontalAlignment="Center"
для обоих сплиттеров - не знаю, почему для него значение "Вправо" должно привести к тому, что поведение будет настолько отвратительным, но изменение его сработало для меня:)
A GridSplitter должен быть помещен в его собственную колонку в сетке. Я не уверен, что полностью понимаю вашу проблему, но я предлагаю вам попробовать создать Grid с 5 ColumnDefinitions. Используйте столбцы 1 и 2 для размещения GridSplitters и столбцов 0, 2 и 4 для содержимого.
В в документе MSDDN GridSplitter есть пример того, как это сделать.
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto" />
<ColumnDefinition/>
</Grid.ColumnDefinitions>
...
<GridSplitter Grid.Column="1"
HorizontalAlignment="Center"
VerticalAlignment="Stretch"
Background="Black"
ShowsPreview="True"
Width="5"
/>