WPF - GridSplitter有三列

Vac*_*ano 15 wpf layout 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> 
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!


编辑:有人建议在他们自己的列中同时使用分离器可能会修复它.我试过了,现在第一个分离器也像第二个分离器一样缩小了列.

以下是该示例的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> 
Run Code Online (Sandbox Code Playgroud)

kiw*_*pom 49

尝试设置HorizontalAlignment="Center"两个分离器 - 不知道为什么将它设置为"正确"应该导致行为变得如此棘手,但改变它对我有用:)

  • 更新:我认为这与GridSplitter的ResizeBehaviour属性相关,如果未指定则默认为BasedOnAlignment,因此只有GridSplitter列右侧的列将被调整大小...需要深入了解msdn doco以确保.. . (2认同)

Szy*_*zga 8

GridSplitter应放在Grid中自己的Column中.我不确定我完全理解你的问题,但我建议你尝试使用5个ColumnDefinitions创建一个Grid.使用第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"
          />
Run Code Online (Sandbox Code Playgroud)