wpf - 在 XAML(带边框)中聚焦/拖动时如何更改 GridSplitter 的背景?

标签 wpf xaml gridsplitter

我发现没有像“DragBackground”之类的 GridSplitter 属性很奇怪。

不过,这似乎有效:

<UserControl.Resources>
    <Style x:Key="CustomGridSplitterStyle" TargetType="GridSplitter">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="GridSplitter">
                    <Grid x:Name="Root" >
                        <!-- Background -->
                        <Rectangle Fill="White" StrokeThickness="0" />
                        <!-- Focus Visual -->
                        <Rectangle x:Name="FocusVisual" Stroke="White" StrokeThickness="1" Opacity="0" IsHitTestVisible="false" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>
  GridSplitter Style="{StaticResource CustomGridSplitterStyle}" Grid.Column="1" Width="6" HorizontalAlignment="Stretch" 
                  BorderThickness="2,0,0,0" BorderBrush="Blue" />

然而,我对这个解决方案的问题是我想在 GridSplitter 的左侧设置一个边框(见上文),这在使用自定义 GridSplitter 样式时不起作用。
有谁知道如何让这个工作?

最佳答案

如果您想使用 BorderBrushBorderThickness在您的 Template您可以使用 TemplateBinding在一些 Border .您也可以使用 Setter在您的 Style定义一些默认值。

<Style x:Key="CustomGridSplitterStyle" TargetType="{x:Type GridSplitter}">
    <Setter Property="Background" Value="White"/>
    <Setter Property="BorderBrush" Value="White"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="GridSplitter">
                <Border 
                    x:Name="FocusVisual" 
                    Background="{TemplateBinding Background}" 
                    BorderBrush="{TemplateBinding BorderBrush}" 
                    BorderThickness="{TemplateBinding BorderThickness}"/>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsDragging" Value="True">
                        <Setter TargetName="FocusVisual" Property="..." Value="..." />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

也因为 GridSplitterThumb因此有 IsDragging 属性,以便您可以创建 Trigger如上例所示,在正确时做某事

关于wpf - 在 XAML(带边框)中聚焦/拖动时如何更改 GridSplitter 的背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26421817/

相关文章:

c# - 防止 ScrollViewer 处理 ListBox 项中的 Tap 事件

c# - 如何在 WPF 中调整窗口大小时让 ListView 自动调整高度

c# - TextRange GetPositionAtOffset 未按预期运行

.net - 如何使矩形延伸到整个网格?

wpf - 是否有一组接口(interface)可以实现以避免在 WPF 绑定(bind)中有转换器

.net - 在 Windows 10 IOT 上运行的 .net Core 3 可以与 WPF 一起使用吗?

wpf - 在 WPF 渐变按钮中,点击后默认颜色和新渐变之间会出现脉冲 - 如何停止

c# - 如何将文本框的长度绑定(bind)到文本 block ?

c# - WPF 垂直 gridsplitter 不工作

Wpf GridSplitter 替换 row.height 属性上的绑定(bind)