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

时间:2014-10-17 09:19:12

标签: 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样式时不起作用。
有人知道如何使这个工作吗?

1 个答案:

答案 0 :(得分:4)

如果您想在BorderBrush中使用BorderThicknessTemplate,可以在某些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来执行某些操作,如上例所示