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

mYn*_*EAm 4 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>
Run Code Online (Sandbox Code Playgroud)

 

  GridSplitter Style="{StaticResource CustomGridSplitterStyle}" Grid.Column="1" Width="6" HorizontalAlignment="Stretch" 
                  BorderThickness="2,0,0,0" BorderBrush="Blue" />
Run Code Online (Sandbox Code Playgroud)

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

dko*_*ozl 6

如果你想使用BorderBrushBorderThicknessTemplate你可以使用TemplateBinding一些Border. 您还可以使用Setterin yourStyle来定义一些默认值。

<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>
Run Code Online (Sandbox Code Playgroud)

此外,因为GridSplitter是 aThumb并且因此具有IsDragging属性,因此您可以创建Trigger以在上面的示例中为真时​​执行某些操作