【问题标题】:WPF: GridSplitter not visible but functions as expectedWPF:GridSplitter 不可见但按预期运行
【发布时间】: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>

我用我的代码尝试了以下操作:

  1. 将 ZIndex=1 分配给网格拆分器,同时它与 LeftDockPanel 共享一列

  2. 为拆分器明确指定一列,为其分配宽度

  3. 确保 GridSplitter 是添加到网格的最后一个控件

  4. 2、3 和 4 的组合 - 正如您在代码中看到的那样。

将鼠标悬停在适当的区域时,光标确实会改变以显示 gridSplitter,但它永远不可见。甚至调整大小的操作都按预期工作。

GridSplitter 不可见,我错过了什么或做错了什么?

【问题讨论】:

  • 我做了一个WPF项目并复制了你的代码,GridSplitter是可见的。
  • 您只需要在GridSplitter 与网格的其他子元素位于同一列时更改ZIndex。在您的情况下,您有一个专用列,因此您无需更改 ZIndex
  • @ZevSpitz 我同意你的观点,但在这种情况下,即使 gridSplitter 位于专用列中,我也会通过更改 ZIndex 来过于谨慎。
  • @Rob 真令人惊讶。但是,是的,即使我也希望 GridSplitter 出现。也许你可以帮我确定我是否错过了什么?

标签: wpf xaml gridsplitter


【解决方案1】:

您的问题不可重现。也许你在某处定义了一个隐含的Style。尝试将Template 属性设置为自定义模板:

<GridSplitter Width="5" Background="Red" Grid.Column="1" BorderBrush="Red"
              VerticalAlignment="Stretch" HorizontalAlignment="Center"
              Margin="3,0,3,0" ResizeBehavior="PreviousAndNext">
    <GridSplitter.Template>
        <ControlTemplate TargetType="{x:Type GridSplitter}">
            <Border BorderBrush="{TemplateBinding BorderBrush}" 
                    BorderThickness="{TemplateBinding BorderThickness}" 
                    Background="{TemplateBinding Background}"/>
        </ControlTemplate>
    </GridSplitter.Template>
</GridSplitter>

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    相关资源
    最近更新 更多