WPF - GridSplitter(三列)

yhxst69z  于 2023-11-21  发布在  其他
关注(0)|答案(3)|浏览(166)

我有一个应用程序与网格与3列.网格之间的第一和第二列的分割器工作正常.为了让分割器在第二和第三列之间,我做了一个列的分割器.(所以现在第三列是真正的第四.)
当我调整大小时,其他列也会缩小。我认为这是因为我将它们设置为相对大小。但我不知道如何修复它。
这是我的问题的一个XAML Pad Ready示例。将其插入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>

j13ufse2

j13ufse21#

尝试为两个分配器设置HorizontalAlignment="Center"-不知道 * 为什么 * 将其设置为“正确”会导致行为变得如此古怪,但更改它对我有效:)

xmd2e60i

xmd2e60i2#

GridSplitter应该放在Grid中自己的列中。我不确定我完全理解你的问题,但我建议你尝试创建一个具有5个ColumnDefinitions的Grid。使用列1和2放置GridSplitter,使用列0,2和4放置内容。
GridSplitter MSDN doc有一个关于如何做到这一点的示例。

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

字符串

unftdfkk

unftdfkk3#

我有一个类似的问题,3列分割器在某个时候意外崩溃,而不是。原来这个问题与负Margin有关(我这样做是为了布局),但显然它混淆了系统,所以从网格分割器中删除负边距对我来说是有效的。

相关问题