How do I change the background of a GridSplitter on focus / drag in XAML (with a border)?

I found it odd that there is no GridSplitter property like DragBackground or something similar.

This seems to work:

<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" />

      

My problem with this solution is that I would like to set a border on the left side of the GridSplitter (see above), which does not work when using a custom GridSplitter style.
Does anyone know how to get this to work?

+3


source to share


1 answer


If you want to use BorderBrush

and BorderThickness

in Template

, you can use TemplateBinding

on some Border

. You can also use Setter

in yours Style

to define some default value.

<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>

      



Also, because it GridSplitter

is Thumb

and as such has a property IsDragging

, so you can create Trigger

to do something when it is true, like in the example above

+4


source







All Articles