编辑
2025-10-14
C#
00

目录

基础概念
基本示例
XAML文件
后台C#文件
自定义样式
XAML文件
总结

在进行WinForm到WPF的转型时,CheckBox是常用的控件之一。它允许用户进行布尔选项的选择或取消选择。本文将介绍在WPF环境下如何使用CheckBox并自定义它的样式,并与WinForm做简单对比。

基础概念

在WinForm中,你可以直接从工具箱拖拽一个CheckBox到Form上,然后在属性面板设置Text、Checked等属性。WPF的工作流程更偏向于界面与逻辑分离:

  • XAML文件中负责定义界面
  • C#后台代码(.cs)中实现逻辑

以下将展示一个基本的CheckBox示例代码与样式定制示例,帮助理解WPF中CheckBox的用法。

基本示例

这里展示一个最简单的CheckBox示例,包含以下功能:

  • 一个CheckBox,绑定点击事件
  • 在文本下方使用一个TextBlock来显示CheckBox的选择状态

XAML文件

XML
<Window x:Class="AppCheckbox.MainWindow" xmlns="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:AppCheckbox" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <!-- 这是一个简单的CheckBox --> <CheckBox x:Name="myCheckBox" Content="选中我" HorizontalAlignment="Center" VerticalAlignment="Center" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"> </CheckBox> <!-- 用来显示当前CheckBox的状态 --> <TextBlock x:Name="tbStatus" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,30,0,0" FontSize="16" Text="当前状态:未选中"> </TextBlock> </Grid> </Window>

后台C#文件

C#
using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace AppCheckbox { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } // 当CheckBox被选中时触发 private void CheckBox_Checked(object sender, RoutedEventArgs e) { tbStatus.Text = "当前状态:已选中"; } // 当CheckBox被取消选中时触发 private void CheckBox_Unchecked(object sender, RoutedEventArgs e) { tbStatus.Text = "当前状态:未选中"; } } }

这个示例中,CheckBox的Checked和Unchecked事件分别由两个方法处理,并将文本内容切换为“已选中”或“未选中”。在WinForm中,你会使用CheckBox_CheckedChanged事件并判断其Checked属性,但在WPF中,更常见的方式是直接使用Checked与Unchecked事件,或使用数据绑定和命令进行更灵活的处理,当然你也可以在Click事件中做,这基本与Winform一回事了。

自定义样式

WPF强大的地方在于它可以为控件定义自定义样式。下面的示例展示了如何编写一个自定义样式,让CheckBox拥有更加个性化的外观。

XAML文件

XML
<Window x:Class="AppCheckbox.Window1" xmlns="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:AppCheckbox" mc:Ignorable="d" Title="Window1" Height="450" Width="800"> <Window.Resources> <Style x:Key="ModernCheckBoxStyle" TargetType="CheckBox"> <Setter Property="Foreground" Value="#2C3E50"/> <Setter Property="FontWeight" Value="Medium"/> <Setter Property="FontSize" Value="14"/> <Setter Property="Margin" Value="10"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="CheckBox"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <Border x:Name="border" Width="20" Height="20" BorderThickness="2" BorderBrush="#3498DB" Background="White" CornerRadius="4" Margin="0,0,10,0"> <Path x:Name="checkMark" Data="M0,7 L4,11 L8,4" Stroke="#3498DB" StrokeThickness="3" Visibility="Collapsed" VerticalAlignment="Center" HorizontalAlignment="Center"/> </Border> <ContentPresenter VerticalAlignment="Center" Margin="5,0,0,0"/> </StackPanel> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="border" Property="Background" Value="#3498DB"/> <Setter TargetName="checkMark" Property="Visibility" Value="Visible"/> <Setter TargetName="checkMark" Property="Stroke" Value="White"/> </Trigger> <Trigger Property="IsMouseOver" Value="True"> <Setter TargetName="border" Property="BorderBrush" Value="#2980B9"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <Grid> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <CheckBox Content="现代风格复选框" Style="{StaticResource ModernCheckBoxStyle}"/> <CheckBox Content="另一个复选框样式" Style="{StaticResource ModernCheckBoxStyle}"/> </StackPanel> </Grid> </Window>

image.png

在这个示例中:

  • 使用<ControlTemplate>来自定义CheckBox的外观
  • BorderPath元素模拟CheckBox的选中效果
  • 通过Trigger监听IsChecked属性的变化,切换checkMark的可见性

与WinForm相比,WPF通过XAML技术实现了界面与逻辑的解耦和高度的可定制化。你不再需要依靠第三方控件来做皮肤化或外观修改,也不用手动绘制多种状态图标。通过WPF的TemplateStyle,可以在XAML中实现大量自定义功能,而后台C#代码只需要关注业务逻辑,从而大大提升开发效率。

总结

在WinForm到WPF的转型中,CheckBox是一个常见且重要的控件。在WPF中:

  • 通过XAML定义布局和样式,让CheckBox的外观和交互更加灵活
  • 事件处理方式可以使用Checked和Unchecked事件,也可以通过数据绑定和命令绑定来管理控件状态
  • 使用StyleTemplate可以实现自定义样式,而不需要复杂的画图或第三方库

希望本篇内容能够帮助你在WPF中更好地理解和使用CheckBox。在此基础上,你还可以继续深入了解WPF的数据绑定、命令机制以及更高级的控件模板技术,为应用带来更丰富的体验。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!