WPF-具有三列的GridSplitter

WPF-具有三列的GridSplitter,wpf,layout,gridsplitter,Wpf,Layout,Gridsplitter,我有一个应用程序与网格与3列。第一列和第二列之间的栅格拆分器工作正常。为了使拆分器位于第二列和第三列之间,我为拆分器制作了一列。(因此,第三列实际上是第四列。) 调整大小时,其他列也会收缩。我想这是因为我把它们设置为相对大小。但我不知道如何修复它 下面是我的问题的一个XAML Pad就绪示例。将其插入XAML pad,然后尝试将最后一列的大小调整为更小 <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentat

我有一个应用程序与网格与3列。第一列和第二列之间的栅格拆分器工作正常。为了使拆分器位于第二列和第三列之间,我为拆分器制作了一列。(因此,第三列实际上是第四列。)

调整大小时,其他列也会收缩。我想这是因为我把它们设置为相对大小。但我不知道如何修复它

下面是我的问题的一个XAML Pad就绪示例。将其插入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="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> 

左手边
右侧

网格拆分器应放置在网格中自己的列中。我不确定我是否完全理解您的问题,但我建议您尝试创建一个包含5列定义的网格。使用第1列和第2列放置网格拆分器,使用第0列、第2列和第4列放置内容

有一个关于如何做到这一点的示例

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

...

尝试为两个拆分器设置
HorizontalAlignment=“Center”
——不知道为什么将其设置为“Right”会导致行为变得如此扭曲,但更改它对我来说很有效:)

我尝试过,现在两个列都断了。请参阅我更新的问题,了解已更改的XAML。还请注意,此问题仅在3列的情况下出现。两列都很好用……我猜您没有像我发布的示例那样尝试HorizontalAlignment=“Center”。)很高兴您解决了这个问题。更新:我认为这与GridSplitter的ResizeBehavious有关。如果未指定,您的属性将默认为BasedOnAlignment,因此只有GridSplitter列右侧的列将调整大小。。。需要深入挖掘msdn文档以确保。。。