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

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

(1)普通风格
 

样式资源代码:

  1. <Style x:Key="cbIsRight" TargetType="{x:Type CheckBox}">
  2. <Setter Property="Height" Value="40"/>
  3. <Setter Property="Width" Value="120"/>
  4. <Setter Property="Foreground" Value="White"/>
  5. <Setter Property="FontWeight" Value="Bold"/>
  6. <Setter Property="Template">
  7. <Setter.Value>
  8. <ControlTemplate TargetType="{x:Type CheckBox}">
  9. <Border x:Name="ForegroundPanel" CornerRadius="4" BorderBrush="#d4d5d5" BorderThickness="1" Padding="0">
  10. <StackPanel Orientation="Horizontal">
  11. <Border x:Name="CheckFlag" VerticalAlignment="Center" CornerRadius="10" Margin="10,0,0,0" BorderThickness="1" Width="20" Height="20">
  12. <Path x:Name="CheckMark" StrokeThickness="3" Stroke="White"></Path>
  13. </Border>
  14. <TextBlock x:Name="tbContent" VerticalAlignment="Center" Margin="2,0" Text="{TemplateBinding Content}"/>
  15. </StackPanel>
  16. </Border>
  17.  
  18. <ControlTemplate.Triggers>
  19. <Trigger Property="IsChecked" Value="True">
  20. <Setter Property="Content" Value="正确"/>
  21. <Setter TargetName="CheckMark" Property="Data" Value="M 4 8 L 8 12 L 14 4"/>
  22. <Setter TargetName="ForegroundPanel" Property="Background">
  23. <Setter.Value>
  24. <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
  25. <GradientStop Color="#89b601" Offset="0.0"/>
  26. <GradientStop Color="#73a80c" Offset="1"/>
  27. </LinearGradientBrush>
  28. </Setter.Value>
  29. </Setter>
  30. <Setter TargetName="CheckFlag" Property="Background" Value="#559800"></Setter>
  31. </Trigger>
  32.  
  33. <Trigger Property="IsChecked" Value="False">
  34. <Setter Property="Content" Value="错误"/>
  35. <Setter TargetName="CheckMark" Property="Data" Value="M 5 5 L 14 14 M 5 14 L 14 5"/>
  36. <Setter TargetName="ForegroundPanel" Property="Background">
  37. <Setter.Value>
  38. <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
  39. <GradientStop Color="#edb200" Offset="0.0"/>
  40. <GradientStop Color="#ed9e00" Offset="1"/>
  41. </LinearGradientBrush>
  42. </Setter.Value>
  43. </Setter>
  44. <Setter TargetName="CheckFlag" Property="Background" Value="#F64708"></Setter>
  45. </Trigger>
  46. </ControlTemplate.Triggers>
  47. </ControlTemplate>
  48. </Setter.Value>
  49. </Setter>
  50. </Style>

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

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

  

(2)左右滑动风格

样式资源代码:

  1. <Style x:Key="CheckStyle2" TargetType="{x:Type CheckBox}">
  2. <Setter Property="Height" Value="40"/>
  3. <Setter Property="Width" Value="120"/>
  4. <Setter Property="Foreground" Value="White"/>
  5. <Setter Property="FontWeight" Value="Bold"/>
  6. <Setter Property="Template">
  7. <Setter.Value>
  8. <ControlTemplate TargetType="{x:Type CheckBox}">
  9. <Border x:Name="ForegroundPanel" CornerRadius="4" BorderBrush="#d4d5d5" BorderThickness="1" Padding="0">
  10. <DockPanel>
  11. <TextBlock x:Name="Content" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="2,0" />
  12. <Border x:Name="CheckFlag" HorizontalAlignment="Right" VerticalAlignment="Center" CornerRadius="10" BorderThickness="0" Width="20" Height="20">
  13. <Grid>
  14. <Path Visibility="Collapsed" Width="20" Height="20" x:Name="CheckMark" SnapsToDevicePixels="False" StrokeThickness="2"
  15. 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">
  16. </Path>
  17. <Path Visibility="Collapsed" Width="20" Height="20" x:Name="InderminateMark" SnapsToDevicePixels="False" StrokeThickness="3"
  18. Stroke="White" Data="M 5 5 L 15 15 M 5 15 L 15 5">
  19. </Path>
  20. </Grid>
  21. </Border>
  22. </DockPanel>
  23. <VisualStateManager.VisualStateGroups>
  24. <VisualStateGroup x:Name="CommonStates">
  25. <VisualState x:Name="Normal" />
  26. <VisualState x:Name="MouseOver"></VisualState>
  27. <VisualState x:Name="Pressed"></VisualState>
  28. <VisualState x:Name="Disabled" />
  29. </VisualStateGroup>
  30. <VisualStateGroup x:Name="CheckStates">
  31. <VisualState x:Name="Checked">
  32. <Storyboard>
  33. <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="CheckMark">
  34. <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
  35. </ObjectAnimationUsingKeyFrames>
  36. </Storyboard>
  37. </VisualState>
  38. <VisualState x:Name="Unchecked">
  39. <Storyboard>
  40. <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="InderminateMark">
  41. <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
  42. </ObjectAnimationUsingKeyFrames>
  43. </Storyboard>
  44. </VisualState>
  45. <VisualState x:Name="Indeterminate"></VisualState>
  46. </VisualStateGroup>
  47. </VisualStateManager.VisualStateGroups>
  48. </Border>
  49.  
  50. <ControlTemplate.Triggers>
  51. <Trigger Property="IsChecked" Value="True">
  52. <Setter TargetName="ForegroundPanel" Property="Background">
  53. <Setter.Value>
  54. <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
  55. <GradientStop Color="#89b601" Offset="0.0"/>
  56. <GradientStop Color="#73a80c" Offset="1"/>
  57. </LinearGradientBrush>
  58. </Setter.Value>
  59. </Setter>
  60. <Setter TargetName="Content" Property="Text" Value="正确"/>
  61. <Setter TargetName="CheckFlag" Property="Background" Value="#559800"></Setter>
  62. <Setter TargetName="Content" Property="DockPanel.Dock" Value="Right"/>
  63. <Setter TargetName="CheckFlag" Property="DockPanel.Dock" Value="Left"/>
  64. </Trigger>
  65.  
  66. <Trigger Property="IsChecked" Value="False">
  67. <Setter TargetName="ForegroundPanel" Property="Background">
  68. <Setter.Value>
  69. <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
  70. <GradientStop Color="#edb200" Offset="0.0"/>
  71. <GradientStop Color="#ed9e00" Offset="1"/>
  72. </LinearGradientBrush>
  73. </Setter.Value>
  74. </Setter>
  75. <Setter TargetName="Content" Property="Text" Value="错误"/>
  76. <Setter TargetName="CheckFlag" Property="Background" Value="#F64708"></Setter>
  77. <Setter TargetName="Content" Property="DockPanel.Dock" Value="Left"/>
  78. <Setter TargetName="CheckFlag" Property="DockPanel.Dock" Value="Right"/>
  79. </Trigger>
  80. </ControlTemplate.Triggers>
  81. </ControlTemplate>
  82. </Setter.Value>
  83. </Setter>
  84. </Style>

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

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

  

WPF:定制Checkbox样式,让“正确”绿得好看,让“错误”红的显眼的更多相关文章

  1. WPF 自定义CheckBox样式

    自定义CheckBox样式,mark一下,方便以后参考复用 设计介绍: 1.一般CheckBox模板太难看了,肯定要重写其中的模板 2.模板状态为未选中状态和选中状态,设置为默认未选中就好了. 默认状 ...

  2. WPF CheckBox样式 ScrollViewer样式 WrapPanel、StackPanel、Grid布局

    本节讲述布局,顺带加点样式给大家看看~单纯学布局,肯定是枯燥的~哈哈 那如上界面,该如何设计呢? 1.一些布局元素经常用到.Grid StackPanel Canvas WrapPanel等.如上这种 ...

  3. WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Che ...

  4. 【转】WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等 本文主要内容: CheckBox复选框的自定义样式,有两种不同的风格实现: RadioB ...

  5. 定制 input[type="radio"] 和 input[type="checkbox"] 样式

    表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...

  6. WPF自定义控件与样式(15)-终结篇 & 系列文章索引 & 源码共享

    系列文章目录  WPF自定义控件与样式(1)-矢量字体图标(iconfont) WPF自定义控件与样式(2)-自定义按钮FButton WPF自定义控件与样式(3)-TextBox & Ric ...

  7. WPF自定义控件与样式(6)-ScrollViewer与ListBox自定义样式

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Scr ...

  8. WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 自定义 ...

  9. WPF编程学习——样式

    本文目录 1.引言 2.怎样使用样式? 3.内联样式 4.已命名样式 5.元素类型样式 6.编程控制样式 7.触发器 1.引言 样式(Style),主要是用来让元素或内容呈现一定外观的属性.WPF中的 ...

随机推荐

  1. 开发者眼中最好的 22 款 GUI 测试工具

    1.Abbot - Java GUI 测试框架 Abbot是一个基于GUI的简单的Java测试框架,它能够帮助开发者测试Java用户界面. 它提供事件自动生成和验证Java GUI组件,使您能够轻松地 ...

  2. Android开发-API指南-服务

    Service 英文原文:http://developer.android.com/guide/components/services.html 采集(更新)日期:2014-12-23 原博客:htt ...

  3. 学习记录 java session保存用户登录

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. Bug修复问题

    采用下面的代码,访问网页:http://www.weather.com.cn/data/cityinfo/101010100.html,想读取下图中红框中的内容,但是抛出了IOException,通过 ...

  5. LSP“浏览器劫持概念

    关于Winsock LSP“浏览器劫持”,中招者一直高居不下,由于其特殊性,直接删除而不恢复LSP的正常状态很可能会导致无法上网所以对其修复需慎重.   先说说什么是Winsock LSP“浏览器劫持 ...

  6. 用命令实现Win7远程桌面关机和重启

    关机 shutdown -s -t 0 重启 shutdown -r -t 0 打开运行框(Win+R键),输入上述命令即可,后面的数字表示关机/重启延迟的时间 at 12:00 shutdown - ...

  7. PAT1013

    #include<cstdio>#include<cstring>#include<vector>using namespace std;const int max ...

  8. Bootstrap布局

    浮动 1.pull-left:左浮动;pull-right:右浮动;清除浮动:clearfix

  9. boost::asio 使用实例

    #include <iostream> #include <boost/asio.hpp> using namespace std; using namespace boost ...

  10. ping 以及 traceroute 用法

    目的:学习linux命令ping,traceroute的用法 1:ping的用法: man ping ping:判断某个主机是否有响应 linux-8o9i:~ # 119.29.29.29 PING ...