【发布时间】:2019-01-18 20:45:53
【问题描述】:
我正在创建一个新的 WPF 应用程序,其中主窗口在停靠面板内有一个网格。网格将有 3 列和 1 行,其中中间列专用于 GridSplitter。其他两列各有一个停靠面板,其中包含任何内容(将在运行时创建)。我的问题是,尽管有多种方法可以使 GridSplitter 可见,但我没有成功。
我什至遵循了 Microsoft 文档中如何操作页面中给出的提示,但没有结果: https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/how-to-make-sure-that-a-gridsplitter-is-visible
这是我的 XAML 代码:
<Window
...
Height="600"
Width="650">
<DockPanel LastChildFill="True">
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<DockPanel Name="LeftDockPanel" Grid.Column="0" LastChildFill="True" Width="350" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="LightCyan">
</DockPanel>
<DockPanel Name="RightDockPanel" Grid.Column="2" LastChildFill="True" Width="300" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="Azure">
</DockPanel>
<GridSplitter Width="5" Background="Red" Grid.Column="1" BorderBrush="Red"
VerticalAlignment="Stretch" HorizontalAlignment="Center"
Margin="3,0,3,0" ResizeBehavior="PreviousAndNext" Panel.ZIndex="1"/>
</Grid>
</DockPanel>
</Window>
我用我的代码尝试了以下操作:
将 ZIndex=1 分配给网格拆分器,同时它与 LeftDockPanel 共享一列
为拆分器明确指定一列,为其分配宽度
确保 GridSplitter 是添加到网格的最后一个控件
2、3 和 4 的组合 - 正如您在代码中看到的那样。
将鼠标悬停在适当的区域时,光标确实会改变以显示 gridSplitter,但它永远不可见。甚至调整大小的操作都按预期工作。
GridSplitter 不可见,我错过了什么或做错了什么?
【问题讨论】:
-
我做了一个WPF项目并复制了你的代码,GridSplitter是可见的。
-
您只需要在
GridSplitter与网格的其他子元素位于同一列时更改ZIndex。在您的情况下,您有一个专用列,因此您无需更改ZIndex。 -
@ZevSpitz 我同意你的观点,但在这种情况下,即使 gridSplitter 位于专用列中,我也会通过更改 ZIndex 来过于谨慎。
-
@Rob 真令人惊讶。但是,是的,即使我也希望 GridSplitter 出现。也许你可以帮我确定我是否错过了什么?
标签: wpf xaml gridsplitter