我已经定义了我的 GridSplittler XAML,如下所示。
<Window>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
<Border Grid.Column="0" Background="Red" />
<GridSplitter Grid.Column="1" ResizeDirection="Columns" Width="3" Height="Auto" HorizontalAlighment="Stretch" VerticalAlignment="Stretch" />
<Border Grid.Column="0" Background="Green" />
</Window>
这将创建两列,它们之间有一个网格拆分器,并且它会在左右拖动网格拆分器时正确调整列的大小。现在,如果您调整整个窗口的大小,我希望左侧红色列的宽度保持固定,并且右侧绿色列的宽度会发生变化(随着窗口大小的调整)。它与调整整个 Visual Studio 应用程序的大小时效果相同,并且解决方案资源管理器的宽度保持固定,但代码选项卡的宽度会发生变化。也与 SQL Server Management Studio 相同;对象资源管理器宽度保持固定,但 SQL 选项卡宽度发生变化。我意识到这两个示例使用了更复杂的停靠控件,但我希望通过使用 WPF GridSplitter 来获得相同的结果。
编辑:根据 mathieu 的建议,所有必要的就是给第一列定义一个初始宽度(下面使用 200 显示)。
<Grid Name="GridName">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="Red" />
<GridSplitter Name="SplitterName" Grid.Column="1" ResizeDirection="Columns" Width="3" Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
<Border Grid.Column="2" Background="Green" />
</Grid>
现在,当窗口重新调整大小时,它只会改变绿色边框的宽度,而红色边框的宽度保持不变。谢谢!