WPF自定义控件03:FlatCheckBox

简介: 本文通过在WPF中引入Font Awesome图标字体来实现自定义FlatCheckBox控件的UI绘图。用户只需要在窗体上引入自定义的FlatCheckBox控件即可使用具有Flat UI效果的控件,非常方便。

前面两篇文章分别介绍了WPF自定义控件FlatButton和WPF字体图标的支持,其中关于WPF中引入Font Awesome字体是本文的前置知识,这篇文章介绍 WPF自定义控件FlatCheckBox,其中的选中状态是用Font Awesome图标字体实现的。下面将详细介绍具体的实现细节。

1 WPF项目结构


    在WPF自定义控件FlatButton这篇文章中,已经介绍了如何创建示例项目,这里基于项目继续进行控件扩展。本质上,FlatCheckBox是继承CheckBox控件,并通过自定义Style实现的Flat UI效果。具体的项目结构如下图所示:

1.jpg

其中的Fonts目录下存放各种图标字体文件,Style目录下存放各种控件的UI 样式定义文件。

2 WPF FlatCheckBox实现


    首先在Yd.WpfControls项目中添加一个类FlatCheckBox.cs,它继承自CheckBox控件,示例代码如下:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows;
usingSystem.Windows.Controls;
usingSystem.Windows.Media;
namespaceYd.WpfControls{
publicclassFlatCheckBox : CheckBox    {
staticFlatCheckBox()
        {
DefaultStyleKeyProperty.OverrideMetadata(typeof(FlatCheckBox),
newFrameworkPropertyMetadata(typeof(FlatCheckBox)));
        }
    }
}

 由代码可知,这里并未对相关的属性和事件进行自定义,而是通过继承CheckBox来快速完成FlatCheckBox自定义控件的开发。FlatCheckBox控件的UI样式主要就是依靠FlatCheckBox.xaml文件进行定义的,示例代码如下:

<ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:Yd.WpfControls"><!--图标字体引入--><ResourceDictionary.MergedDictionaries><ResourceDictionarySource="/Yd.WpfControls;component/Style/IconFont.xaml"/></ResourceDictionary.MergedDictionaries><!--FlatCheckBox 样式--><StyleTargetType="{x:Type local:FlatCheckBox}"><SetterProperty="Background"Value="Transparent"/><SetterProperty="Foreground"Value="{x:Static local:FlatColors.PETER_RIVER}"/><SetterProperty="Padding"Value="0"></Setter><SetterProperty="FontSize"Value="{x:Static local:FlatFonts.contentFontSize}"></Setter><SetterProperty="Template"><Setter.Value><ControlTemplateTargetType="{x:Type local:FlatCheckBox}"><Gridx:Name="grid"Margin="{TemplateBinding Padding}"VerticalAlignment="Center"><StackPanelOrientation="Horizontal"VerticalAlignment="Center"><!-- 控件图标字体 --><TextBlockx:Name="icon"Text="&#xf0c8;"Style="{StaticResource faFont}"FontSize="26"Margin="3"Foreground="{TemplateBinding Foreground}"/><ContentPresenterVerticalAlignment="Center"/></StackPanel></Grid><!--触发器--><ControlTemplate.Triggers><TriggerProperty="IsChecked"Value="true"><SetterProperty="Text"Value="&#xf14a;"TargetName="icon"></Setter><SetterProperty="Foreground"Value="{x:Static local:FlatColors.BELIZE_HOLE}"></Setter></Trigger><TriggerProperty="IsChecked"Value="{x:Null}"><SetterProperty="Text"Value="&#xf0c8;"TargetName="icon"></Setter><SetterProperty="Foreground"Value="{x:Static local:FlatColors.PETER_RIVER}"></Setter></Trigger><TriggerProperty="IsMouseOver"Value="true"><SetterProperty="Foreground"Value="{x:Static local:FlatColors.PETER_RIVER}"></Setter></Trigger><TriggerProperty="IsEnabled"Value="False"><SetterProperty="Opacity"Value="0.5"TargetName="grid"></Setter></Trigger></ControlTemplate.Triggers></ControlTemplate></Setter.Value></Setter></Style></ResourceDictionary>

其中的<TextBlock  x:Name="icon" Text="&#xf0c8;" Style="{StaticResource faFont}" />则指定了文本的样式定义,Style资源Key为faFont,Text为"&#xf0c8;" ,这里需要查看Font Awesome图标字体CheatSheet图标对照清单 ( http://www.fontawesome.com.cn/cheatsheet/),部分界面截图如下:

2.jpg

通过触发器Trigger来确定FlatCheckBox属性IsChecked变化时,如何在UI上进行显示,比如当选中时,属性IsChecked的值为true时,则会触发如下触发器定义的规则:

<TriggerProperty="IsChecked"Value="true"><SetterProperty="Text"Value="&#xf14a;"TargetName="icon"></Setter><SetterProperty="Foreground"Value="{x:Static local:FlatColors.BELIZE_HOLE}"></Setter></Trigger>

此时,设置模板中的名称为icon的控件Text值为&#xf14a; 即为勾选的图标,且字体颜色为FlatColors.BELIZE_HOLE 。

3 WPF FlatCheckBox测试


    首先,需要重新生成一下项目文件,然后在WpfControls项目中添加自定义控件FlatCheckBox,MainWindow.xaml示例代码如下:

<Windowxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfControls"xmlns:WpfControls="clr-namespace:Yd.WpfControls;assembly=Yd.WpfControls"x:Class="WpfControls.MainWindow"mc:Ignorable="d"Title="MainWindow"Height="450"Width="800"><GridRenderTransformOrigin="0.219,0.452"><WpfControls:FlatCheckBoxContent="是否禁用"HorizontalAlignment="Left"Margin="89,160,0,0"VerticalAlignment="Top"Height="57"Width="180"/></Grid></Window>

运行界面如下:

3.jpg

相关文章
WPF自定义控件05:ToggleButton
本文重点介绍WPF中如何实现自定义ToggleButton控件,它是一个开关控件,通过单击来进行状态的快速切换。
5083 0
WPF自定义控件05:ToggleButton
|
人工智能 C#
WPF自定义控件库之Window窗口
本文以自定义窗口为例,简述WPF开发中如何通过自定义控件来扩展功能和样式,仅供学习分享使用,如有不足之处,还请指正。
246 5
|
XML C# 数据格式
WPF中用户控件和自定义控件
无论是在WPF中还是WinForm中,都有用户控件(UserControl)和自定义控件(CustomControl),这两种控件都是对已有控件的封装,实现功能重用。但是两者还是有一些区别,本文对这两种控件进行讲解。
|
数据可视化 前端开发 C#
WPF自定义控件的三种方式
某些场景下,我们确实需要创建新的控件。此时,理解 WPF不同控件的创建方法就显得非常重要。 WPF 提供3个用于创建控件的方法,每个方法都提供不同的灵活度。
892 1
WPF自定义控件的三种方式
|
C# 容器
WPF自定义控件10:FlatListView
在不少的应用程序中,有时候需要使用ListView控件来显示一组集合数据,这样可以从一组数据中进行选择,让数据更加的规范,便于统计和分析。本文将介绍一下自定义的列表控件FlatListView,它与FlatCheckBox实现过程非常类似,它是继承自ListView,但使用自定义的UI样式来美化界面。
581 0
WPF自定义控件10:FlatListView
WPF自定义控件09:FlatWaveButton
按钮在很多应用程序中都是必不可少的控件,如果给按钮控件添加一些动画效果,比如单击它后会显示一个水波纹扩散的动画效果,那么感觉上更加的高级。本文将介绍一下自定义水波纹按钮控件FlatWaveButton,它是一个UserControl(FlatButton)控件,自身携带UI样式和后台逻辑。
654 0
WPF自定义控件09:FlatWaveButton
|
Web App开发 C#
WPF自定义控件08:FlatRoundImage
在不少的应用程序中,用户中心的个人页面经常需要显示头像,这个当前主流的做法就是用户上传一个图片,系统进行截取并显示为一个圆形的轮廓,即圆形的照片。本文将介绍一下自定义的图片控件FlatRoundImage,它是一个UserControl控件,自身携带UI样式和后台逻辑。
653 0
WPF自定义控件08:FlatRoundImage
WPF自定义控件07:FlatTextBox
本文将介绍一下自定义的文本框控件FlatTextBox,它与FlatCheckBox实现过程非常类似,它是继承自TextBox,但使用自定义的UI样式来美化界面,并添加了特有的一些依赖属性。
538 0
WPF自定义控件07:FlatTextBox
WPF自定义控件06:FlatComboBox
在不少的应用程序中,经常需要使用下拉框(ComboBox)控件来从类别字段中选择,这样可以限定值的范围,让数据更加的规范,便于统计和分析。本文将介绍一下自定义的下拉框控件FlatComboBox,它与FlatCheckBox实现过程非常类似,它是继承自ComboBox,但使用自定义的UI样式来美化界面。下面将详细介绍具体的实现细节。
835 0
WPF自定义控件06:FlatComboBox
WPF自定义控件04:FlatRadioButton
本文通过在WPF中引入Font Awesome图标字体来实现自定义FlatRadioButton控件的UI绘图。用户只需要在窗体上引入自定义的FlatRadioButton控件即可使用具有Flat UI效果的控件,非常方便。
610 0
WPF自定义控件04:FlatRadioButton