zoukankan      html  css  js  c++  java
  • WPF:定制Checkbox样式,让“正确”绿得好看,让“错误”红的显眼

        WPF提供了样式、模板、触发器、状态管理、矢量形状等方式,让我们不需要背景图片,也可以轻松定制控件的风格样式。下面是笔者针对Checkbox进行的样式定制,让“正确”绿得好看,让“错误”红的显眼。
        本文提供了两种风格,如果不是很适应自己系统的整体风格,可以对样式代码进行修改。

        源代码:http://download.csdn.net/download/wadexmy/8099685

    (1)普通风格
     

    样式资源代码:

        <Style x:Key="cbIsRight" TargetType="{x:Type CheckBox}">
            <Setter Property="Height" Value="40"/>
            <Setter Property="Width" Value="120"/>
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="FontWeight" Value="Bold"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type CheckBox}">
                        <Border x:Name="ForegroundPanel" CornerRadius="4" BorderBrush="#d4d5d5" BorderThickness="1" Padding="0">
                            <StackPanel Orientation="Horizontal">
                                <Border x:Name="CheckFlag" VerticalAlignment="Center" CornerRadius="10" Margin="10,0,0,0" BorderThickness="1" Width="20" Height="20">
                                    <Path x:Name="CheckMark" StrokeThickness="3" Stroke="White"></Path>
                                </Border>
                                <TextBlock x:Name="tbContent" VerticalAlignment="Center" Margin="2,0" Text="{TemplateBinding Content}"/>
                            </StackPanel>
                        </Border>
                        
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsChecked" Value="True">
                                <Setter Property="Content" Value="正确"/>
                                <Setter TargetName="CheckMark" Property="Data" Value="M 4 8 L 8 12 L 14 4"/>
                                <Setter TargetName="ForegroundPanel" Property="Background">
                                    <Setter.Value>
                                        <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                            <GradientStop Color="#89b601" Offset="0.0"/>
                                            <GradientStop Color="#73a80c" Offset="1"/>
                                        </LinearGradientBrush>
                                    </Setter.Value>
                                </Setter>
                                <Setter TargetName="CheckFlag" Property="Background" Value="#559800"></Setter>
                            </Trigger>
    
                            <Trigger Property="IsChecked" Value="False">
                                <Setter Property="Content" Value="错误"/>
                                <Setter TargetName="CheckMark" Property="Data" Value="M 5 5 L 14 14 M 5 14 L 14 5"/>
                                <Setter TargetName="ForegroundPanel" Property="Background">
                                    <Setter.Value>
                                        <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                            <GradientStop Color="#edb200" Offset="0.0"/>
                                            <GradientStop Color="#ed9e00" Offset="1"/>
                                        </LinearGradientBrush>
                                    </Setter.Value>
                                </Setter>
                                <Setter TargetName="CheckFlag" Property="Background" Value="#F64708"></Setter>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    

    主界面Checkbox控件对样式引用代码:

    <CheckBox Style="{StaticResource CheckStyle1}"/>
    

      

    (2)左右滑动风格

    样式资源代码:

     <Style x:Key="CheckStyle2" TargetType="{x:Type CheckBox}">
                    <Setter Property="Height" Value="40"/>
                    <Setter Property="Width" Value="120"/>
                    <Setter Property="Foreground" Value="White"/>
                    <Setter Property="FontWeight" Value="Bold"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type CheckBox}">
                                <Border x:Name="ForegroundPanel" CornerRadius="4" BorderBrush="#d4d5d5" BorderThickness="1" Padding="0">
                                    <DockPanel>
                                        <TextBlock x:Name="Content" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="2,0" />
                                        <Border x:Name="CheckFlag" HorizontalAlignment="Right" VerticalAlignment="Center" CornerRadius="10" BorderThickness="0" Width="20" Height="20">
                                            <Grid>
                                                <Path Visibility="Collapsed" Width="20" Height="20" x:Name="CheckMark" SnapsToDevicePixels="False"  StrokeThickness="2"
                                                      Stroke="White" Fill="White" Data="M 5 7 L 7 15 L 18 2 L 17 2 L 7 14 L 6 7 L 5 7">
                                                </Path>
                                                <Path Visibility="Collapsed"  Width="20"  Height="20" x:Name="InderminateMark" SnapsToDevicePixels="False" StrokeThickness="3"
                                                      Stroke="White" Data="M 5 5 L 15 15 M 5 15 L 15 5">
                                                </Path>
                                            </Grid>
                                        </Border>
                                    </DockPanel>
                                    <VisualStateManager.VisualStateGroups>
                                        <VisualStateGroup x:Name="CommonStates">
                                            <VisualState x:Name="Normal" />
                                            <VisualState x:Name="MouseOver"></VisualState>
                                            <VisualState x:Name="Pressed"></VisualState>
                                            <VisualState x:Name="Disabled" />
                                        </VisualStateGroup>
                                        <VisualStateGroup x:Name="CheckStates">
                                            <VisualState x:Name="Checked">
                                                <Storyboard>
                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="CheckMark">
                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
                                                    </ObjectAnimationUsingKeyFrames>
                                                </Storyboard>
                                            </VisualState>
                                            <VisualState x:Name="Unchecked">
                                                <Storyboard>
                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="InderminateMark">
                                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
                                                    </ObjectAnimationUsingKeyFrames>
                                                </Storyboard>
                                            </VisualState>
                                            <VisualState x:Name="Indeterminate"></VisualState>
                                        </VisualStateGroup>
                                    </VisualStateManager.VisualStateGroups>
                                </Border>
                                
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsChecked" Value="True">
                                        <Setter TargetName="ForegroundPanel" Property="Background">
                                            <Setter.Value>
                                                <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                                    <GradientStop Color="#89b601" Offset="0.0"/>
                                                    <GradientStop Color="#73a80c" Offset="1"/>
                                                </LinearGradientBrush>
                                            </Setter.Value>
                                        </Setter>
                                        <Setter TargetName="Content" Property="Text" Value="正确"/>
                                        <Setter TargetName="CheckFlag" Property="Background" Value="#559800"></Setter>
                                        <Setter TargetName="Content" Property="DockPanel.Dock" Value="Right"/>
                                        <Setter TargetName="CheckFlag" Property="DockPanel.Dock" Value="Left"/>
                                    </Trigger>
                                    
                                    <Trigger Property="IsChecked" Value="False">
                                        <Setter TargetName="ForegroundPanel" Property="Background">
                                            <Setter.Value>
                                                <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                                    <GradientStop Color="#edb200" Offset="0.0"/>
                                                    <GradientStop Color="#ed9e00" Offset="1"/>
                                                </LinearGradientBrush>
                                            </Setter.Value>
                                        </Setter>
                                        <Setter TargetName="Content" Property="Text" Value="错误"/>
                                        <Setter TargetName="CheckFlag" Property="Background" Value="#F64708"></Setter>
                                        <Setter TargetName="Content" Property="DockPanel.Dock" Value="Left"/>
                                        <Setter TargetName="CheckFlag" Property="DockPanel.Dock" Value="Right"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>

    主界面Checkbox控件对样式引用代码:

    <CheckBox Style="{StaticResource CheckStyle2}"/>
    

      

  • 相关阅读:
    SQL Server 与 Entity Framework 级联删除
    web api 2 学习笔记 (Odata ODataQueryOptions 使用)
    【建议收藏】设计师必备-史上最全的个人资料页面设计模板下载
    浅谈产品经理入门和学习路径
    最全面!2019年最新UX设计趋势预测合集
    最新Dashboard设计实例、技巧和资源集锦,视觉和功能两不误,妥妥的!
    【技巧分享】设计师如何向开发人员顺利交付作品?
    摹客iDoc201901-2新功能点评
    企业类Web原型制作分享-Kraftwerk
    【新年福利】2019年值得一用的8款协作工具
  • 原文地址:https://www.cnblogs.com/wangnmhb/p/4062067.html
Copyright © 2011-2022 走看看