c# - 使多个 gridsplitters 正确地一起工作
问题描述
所以,我有一个看起来像这样的 XAML 布局:
<Grid Background="white">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="cdMainmenu" Width="200" />
<ColumnDefinition Width="80" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="80" />
<ColumnDefinition x:Name="cdReminders" Width="200" />
</Grid.ColumnDefinitions>
<Frame Grid.Column="0" Background="Beige" >
</Frame>
<Frame Grid.Column="2" Background="LightGoldenrodYellow" >
</Frame>
<Frame Grid.Column="4" Background="DarkSeaGreen" >
</Frame>
<Frame Grid.Column="1" Background="Orange" >
</Frame>
<Frame Grid.Column="3" Background="Coral" >
</Frame>
<GridSplitter Grid.Column="0" x:Name="gridSplitterSx" HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="2" Background="Black" Margin="0,128,0,0" />
<GridSplitter Grid.Column="4" x:Name="gridSplitterDx" HorizontalAlignment="Left" VerticalAlignment="Stretch" Width="2" Background="Black" Margin="0,173,0,0" ResizeBehavior="PreviousAndCurrent" />
</Grid>
最左边的 GridSplitter (gridSplitterSx) 符合我的预期:在移动它时,它会正确调整 Beige 部分的大小并随之移动 Orange 部分,从而正确缩小 LightGoldenrodYellow 部分的宽度。
然而,最右边的 GridSplitter (gridSplitterDx) 没有:当移动它时,DarkSeaGreen 部分保持其当前宽度,而 Coral 部分以与我移动鼠标相反的方式展开。
我想要实现的是:在移动 gridSplitterDx 时,DarkSeaGreen 部分应展开并将 Coral 部分向左移动,保持其大小不变,缩小 LightGoldenrodYellow 部分。
关于我做错了什么的任何提示?
解决方案
因此,对于任何有兴趣的人,我可以通过将橙色部分与米色部分一起移动(通过将它们都关闭到具有两列的网格中)并为 gridSplitterSx 提供等于橙色部分宽度的右边距来解决我的问题;我还将 Coral Section 与 DarkSeaGreen 一起移动,同样将它们放在一个 Grid 中,并为 gridSplitterDx 提供与 Coral Section 宽度相等的左边距。
像这样的东西:
<Grid Background="white">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="cdMainmenu" Width="200" />
<ColumnDefinition Width="*" />
<ColumnDefinition x:Name="cdReminders" Width="200" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Frame Grid.Column="0" Background="Beige">
</Frame>
<Frame Grid.Column="1" Background="Orange" Width="80" >
</Frame>
</Grid>
<Frame Grid.Column="1" Background="LightGoldenrodYellow" >
</Frame>
<Grid Grid.Column="2" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Frame Grid.Column="0" Background="Coral" Width="80" >
</Frame>
<Frame Grid.Column="1" Background="DarkSeaGreen" >
</Frame>
</Grid>
<GridSplitter Grid.Column="0" x:Name="gridSplitterSx" HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="2" Background="Black" Margin="0,128,80,0" />
<GridSplitter Grid.Column="2" x:Name="gridSplitterDx" HorizontalAlignment="Left" VerticalAlignment="Stretch" Width="2" Background="Black" Margin="80,173,0,0" />
</Grid>
对于我的用例,这足以解决问题;我希望这对其他人也有用
推荐阅读
- javascript - react-scripts 启动错误(找不到模块'../scripts/start') - 我该如何解决这个问题?
- ios - iOS CocoaLumberjack 日志框架未记录到设备上的文件
- c# - 在 ML.NET 中训练模型而不标记特征
- php - 释义注解
- python - 使用 Multiprocessing.pool.map 的代码运行速度比不使用的要慢
- reactjs - React Native Modal 未显示
- javascript - JavaScript 倒数计时器 - 截止日期
- python - 使用 Python 获取 Facebook 洞察
- python - 如何在多个 GPU 上使用 tensorflow 进行并行推理?
- angular - 在 Azure Dev Spaces 和 VS Code 中调试 Angular 应用程序