#462 – 画一个外观更漂亮的GridSplitter(Drawing a Better Looking GridSplitter)

本文介绍如何通过自定义样式来美化WPF中GridSplitter控件的外观,包括使用线性渐变背景和绘制水平线条以增强视觉效果。

GridSplitter 用来分隔Grid面板的行和列。默认情况下,GridSplitter 控件由一个单独的Border 元素组成。你可以设置border的边框,颜色和背景色来改变GridSplitter 的外观。

我们可以在其表面画一对水平线使GridSplitter 的外观更漂亮。

我们通过重写GridSplitter 默认样式来实现这个外观。

<Window.Resources>
    <Style x:Key="GridSplitterPreviewStyle" >
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle Fill="#80000000"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="GridSplitterStyle1" TargetType="{x:Type GridSplitter}">
        <Setter Property="Background"
                Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
        <Setter Property="PreviewStyle" Value="{StaticResource GridSplitterPreviewStyle}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GridSplitter}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            Background="{TemplateBinding Background}"
                            CornerRadius="5">
                        <Canvas RenderOptions.EdgeMode="Aliased" UseLayoutRounding="True"
                                Height="6" VerticalAlignment="Center"
                                Width="50" HorizontalAlignment="Center">
                            <Line X1="0" X2="50" Y1="0" Y2="0"
                                  Stroke="White" StrokeThickness="1"/>
                            <Line X1="0" X2="50" Y1="1" Y2="1"
                                  Stroke="#A0A0A0" StrokeThickness="1"/>
                            <Line X1="0" X2="50" Y1="4" Y2="4"
                                  Stroke="White" StrokeThickness="1"/>
                            <Line X1="0" X2="50" Y1="5" Y2="5"
                                  Stroke="#A0A0A0" StrokeThickness="1"/>
                        </Canvas>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

同时,也为GridSplitter 指定渐变的背景色。

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
 
    <Label Content="Row 0 Col 0" Background="Azure" Grid.Row="0" Grid.Column="0" />
    <Label Content="Row 0 Col 1" Background="Lavender" Grid.Row="0" Grid.Column="1" />
    <Label Content="Row 2 Col 0" Background="Moccasin" Grid.Row="2" Grid.Column="0" />
    <Label Content="Row 2 Col 1" Background="Honeydew" Grid.Row="2" Grid.Column="1" />
 
    <GridSplitter Grid.Row ="1" Grid.ColumnSpan="2" Height="16"
                  VerticalAlignment="Center" HorizontalAlignment="Stretch"
                  BorderBrush="White" BorderThickness="1"
                  Style="{DynamicResource GridSplitterStyle1}">
        <GridSplitter.Background>
            <LinearGradientBrush EndPoint="0.5,0" StartPoint="0.5,1">
                <GradientStop Color="#A0A0A0" Offset="0"/>
                <GradientStop Color="#E5E5E5" Offset="0.15"/>
                <GradientStop Color="#ECECEC" Offset="0.8"/>
                <GradientStop Color="#E5E5E5" Offset="1"/>
            </LinearGradientBrush>
        </GridSplitter.Background>
    </GridSplitter>
</Grid>

原文地址:https://wpf.2000things.com/2011/12/30/462-drawing-a-better-looking-gridsplitter/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值