WPF 入门教程复选框控件

92 篇文章 9 订阅
92 篇文章 24 订阅

CheckBox 控件允许最终用户打开或关闭选项,通常反映代码隐藏中的布尔值。让我们直接进入一个示例,以防您不确定 CheckBox 的外观:

<Window x:Class="WpfTutorialSamples.Basic_controls.CheckBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CheckBoxSample" Height="140" Width="250">
    <StackPanel Margin="10">
		<Label FontWeight="Bold">Application Options</Label>
		<CheckBox>Enable feature ABC</CheckBox>
		<CheckBox IsChecked="True">Enable feature XYZ</CheckBox>
		<CheckBox>Enable feature WWW</CheckBox>
	</StackPanel>
</Window>

如您所见,CheckBox 非常易于使用。在第二个 CheckBox 上,我使用 IsChecked 属性默认检查它,但除此之外,不需要任何属性来使用它。如果您想检查某个 CheckBox 是否被选中,也应该从代码隐藏中使用 IsChecked 属性。

自定义内容

CheckBox 控件继承自 ContentControl 类,这意味着它可以获取自定义内容并在其旁边显示。如果你只是指定一段文本,就像我在上面的例子中所做的那样,WPF 会将它放在 TextBlock 控件中并显示它,但这只是让你更轻松的快捷方式。您可以在其中使用任何类型的控件,我们将在下一个示例中看到:

<Window x:Class="WpfTutorialSamples.Basic_controls.CheckBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CheckBoxSample" Height="140" Width="250">
    <StackPanel Margin="10">
		<Label FontWeight="Bold">Application Options</Label>
		<CheckBox>
			<TextBlock>
				Enable feature <Run Foreground="Green" FontWeight="Bold">ABC</Run>
			</TextBlock>
		</CheckBox>
		<CheckBox IsChecked="True">
			<WrapPanel>
				<TextBlock>
					Enable feature <Run FontWeight="Bold">XYZ</Run>
				</TextBlock>
				<Image Source="/WpfTutorialSamples;component/Images/question.png" Width="16" Height="16" Margin="5,0" />
			</WrapPanel>
		</CheckBox>
		<CheckBox>
			<TextBlock>
				Enable feature <Run Foreground="Blue" TextDecorations="Underline" FontWeight="Bold">WWW</Run>
			</TextBlock>
		</CheckBox>
	</StackPanel>
</Window>

正如您从示例标记中看到的那样,您几乎可以对内容做任何想做的事情。在所有三个复选框中,我对文本做了不同的处理,在中间的一个复选框中,我什至加入了一个 Image 控件。通过将控件指定为内容,而不仅仅是文本,我们可以更好地控制外观,而且很酷的是,无论您单击内容的哪一部分,它都会激活 CheckBox 并打开或关闭它.

IsThreeState 属性

如前所述,CheckBox 通常对应一个布尔值,这意味着它只有两种状态:真或假(开或关)。然而,由于布尔数据类型可能为空,有效地允许第三个选项(真、假或空),CheckBox 控件也可以支持这种情况。通过将 IsThreeState 属性设置为 true,CheckBox 将获得称为“不确定状态”的第三种状态。

一个常见的用法是有一个“全部启用”复选框,它可以控制一组子复选框,以及显示它们的集体状态。我们的示例展示了如何创建可以打开和关闭的功能列表,顶部有一个常见的“全部启用”复选框:

<Window x:Class="WpfTutorialSamples.Basic_controls.CheckBoxThreeStateSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CheckBoxThreeStateSample" Height="170" Width="300">
	<StackPanel Margin="10">
		<Label FontWeight="Bold">Application Options</Label>
		<StackPanel Margin="10,5">
			<CheckBox IsThreeState="True" Name="cbAllFeatures" Checked="cbAllFeatures_CheckedChanged" Unchecked="cbAllFeatures_CheckedChanged">Enable all</CheckBox>
			<StackPanel Margin="20,5">
				<CheckBox Name="cbFeatureAbc" Checked="cbFeature_CheckedChanged" Unchecked="cbFeature_CheckedChanged">Enable feature ABC</CheckBox>
				<CheckBox Name="cbFeatureXyz" IsChecked="True" Checked="cbFeature_CheckedChanged" Unchecked="cbFeature_CheckedChanged">Enable feature XYZ</CheckBox>
				<CheckBox Name="cbFeatureWww" Checked="cbFeature_CheckedChanged" Unchecked="cbFeature_CheckedChanged">Enable feature WWW</CheckBox>
			</StackPanel>
		</StackPanel>
	</StackPanel>
</Window>

using System;
using System.Windows;

namespace WpfTutorialSamples.Basic_controls
{
	public partial class CheckBoxThreeStateSample : Window
	{
		public CheckBoxThreeStateSample()
		{
			InitializeComponent();
		}


		private void cbAllFeatures_CheckedChanged(object sender, RoutedEventArgs e)
		{
			bool newVal = (cbAllFeatures.IsChecked == true);
			cbFeatureAbc.IsChecked = newVal;
			cbFeatureXyz.IsChecked = newVal;
			cbFeatureWww.IsChecked = newVal;
		}

		private void cbFeature_CheckedChanged(object sender, RoutedEventArgs e)
		{
			cbAllFeatures.IsChecked = null;
			if((cbFeatureAbc.IsChecked == true) && (cbFeatureXyz.IsChecked == true) && (cbFeatureWww.IsChecked == true))
				cbAllFeatures.IsChecked = true;
			if((cbFeatureAbc.IsChecked == false) && (cbFeatureXyz.IsChecked == false) && (cbFeatureWww.IsChecked == false))
				cbAllFeatures.IsChecked = false;
		}

	}
}

此示例从两个不同的角度工作:如果选中或取消选中“全部启用”复选框,则所有子复选框(在我们的示例中每个都代表一个应用程序功能)将被选中或取消选中。不过,它也可以反过来工作,其中选中或取消选中子 CheckBox 会影响“启用所有”复选框状态:如果它们都被选中或未选中,则“启用所有”复选框将获得相同的状态 - 否则该值将是留下空值,这会强制 CheckBox 进入不确定状态。

所有这些行为都可以在上面的屏幕截图中看到,并且是通过订阅 CheckBox 控件的 Checked 和 Unchecked 事件来实现的。在实际示例中,您可能会改为绑定值,但此示例显示了使用 IsThreeState 属性创建“全部切换”效果的基础知识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值