我有一个带有 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>
尝试为两个分离器设置
HorizontalAlignment="Center"
- 不知道为什么将其设置为“正确”会导致行为变得如此扭曲,但改变它对我有用:)
GridSplitter 应放置在网格中其自己的列中。我不确定我是否完全理解您的问题,但我建议您尝试创建一个具有 5 个 ColumnDefinitions 的网格。使用第 1 列和第 2 列放置 GridSplitter,使用第 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
有关(我这样做是为了布局目的),但显然它混淆了系统,因此从网格分离器中删除负边距对我有用。