WPF CheckBox控件 我全都要
WPF CheckBox控件 我全都要
CheckBox控件允许选择一个或多个选项。
CheckBox控件具有一些基本的属性,这些属性可以帮助你自定义控件的显示和行为。
- Content: 指定显示在CheckBox中的文本。
- IsChecked: 指示CheckBox是否被选中的属性。
- Width 和 Height: 设置CheckBox的宽度和高度。
- Margin 和 Padding: 设置CheckBox边缘和内部的空白距离。
- Foreground 和 Background: 设置文本和背景的颜色。
<StackPanel>
<!--
Margin是指控件与容器控件的间距。
Margin有四个值的时候分别对应left、top、right、bottom,即左、上、右、下。
这里设置了上面离容器边界的距离为20-->
<Label Content="你喜欢什么牌子的手机?" Margin="10,20,10,10" />
<CheckBox Content="苹果" Margin="10" />
<CheckBox Content="梨子" Margin="10" />
<CheckBox Content="橘子" Margin="10" />
</StackPanel>
按F5运行,点一点,可以看到选择几个都可以。

修改完善一下XAML,添加个button
<StackPanel>
<!--
Margin是指控件与容器控件的间距。
Margin有四个值的时候分别对应left、top、right、bottom,即左、上、右、下。
这里设置了上面离容器边界的距离为20-->
<Label Content="你喜欢什么牌子的手机?" Margin="10,20,10,10" />
<CheckBox x:Name="CheckBox1" Content="苹果" Margin="30,10,10,10" />
<CheckBox x:Name="CheckBox2" Content="梨子" Margin="30,10,10,10" />
<CheckBox x:Name="CheckBox3" Content="橘子" Margin="30,10,10,10" />
<Button Click="Button_Click" Content="提交" Margin="30,10,30,10" />
</StackPanel>
修改完善一下CS代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
string? yourselected="";
if (CheckBox1.IsChecked == true)
yourselected=CheckBox1.Content.ToString();
if (CheckBox2.IsChecked == true)
yourselected += CheckBox2.Content.ToString();
if (CheckBox3.IsChecked == true)
yourselected += CheckBox3.Content.ToString();
MessageBox.Show(yourselected);
}
按F5运行一下。

________________________________________
做个例子吧。
CheckBox 通常对应一个布尔值,这意味着它只有两种状态:真或假(开或关)。然而,由于布尔数据类型可能为空,有效地允许第三个选项(真、假或空),CheckBox 控件也可以支持这种情况。通过将 IsThreeState 属性设置为 true,CheckBox 将获得称为“不确定状态”的第三种状态。
一个常见的用法是有一个“全部启用”复选框,它可以控制一组子复选框,以及显示它们的集体状态。我们的示例展示了如何创建可以打开和关闭的功能列表,顶部有一个常见的“全部启用”复选框。
<Window x:Class="WpfApp7.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:WpfApp7"
mc:Ignorable="d"
Title="MainWindow" Height="200" Width="300">
<Grid>
<!--加个框框,再加个标题-->
<GroupBox Header="应用程序选项" BorderBrush="Blue" Margin="10">
<!--第一层的勾选框-->
<StackPanel Margin="0,10,0,0">
<CheckBox IsThreeState="True"
Content="勾选全部选项"
x:Name="AllCheck"
Checked="AllCheckeChange"
Unchecked="AllCheckeChange"
/>
<!--第二次的勾选框-->
<StackPanel Margin="20,10,0,0">
<CheckBox x:Name="checkbox1"
Content="强制保存文件"
Margin="5"
Checked="CheckeChange"
Unchecked="CheckeChange"
/>
<CheckBox x:Name="checkbox2"
Content="文件保存时自动保存副本"
Margin="5"
Checked="CheckeChange"
Unchecked="CheckeChange"
/>
<CheckBox x:Name="checkbox3"
Content="自动添加文件扩展名"
Margin="5"
Checked="CheckeChange"
Unchecked="CheckeChange"
IsChecked="True"
/>
</StackPanel>
</StackPanel>
</GroupBox>
</Grid>
</Window>
上面的XAML多了基层嵌套。
CS源文件代码。
using System.Windows;
namespace WpfApp7
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void AllCheckeChange(object sender, RoutedEventArgs e)
{
bool allCheckedState = (AllCheck.IsChecked == true);
checkbox1.IsChecked = allCheckedState;
checkbox2.IsChecked = allCheckedState;
checkbox3.IsChecked = allCheckedState;
}
private void CheckeChange(object sender, RoutedEventArgs e)
{
AllCheck.IsChecked = null;
if ((checkbox1.IsChecked == true) && (checkbox2.IsChecked == true) && (checkbox3.IsChecked == true))
{
AllCheck.IsChecked = true;
}
if ((checkbox1.IsChecked == false) && (checkbox2.IsChecked == false) && (checkbox3.IsChecked == false))
{
AllCheck.IsChecked = false;
}
}
}
}
运行结果。

此示例从两个不同的角度工作:如果选中或取消选中“全部启用”复选框,则所有子复选框(在我们的示例中每个都代表一个应用程序功能)将被选中或取消选中。不过,它也可以反过来工作,其中选中或取消选中子 CheckBox 会影响“启用所有”复选框状态:如果它们都被选中或未选中,则“启用所有”复选框将获得相同的状态 - 否则该值将是留下空值,这会强制 CheckBox 进入不确定状态。
所有这些行为都是通过订阅 CheckBox 控件的 Checked 和 Unchecked 事件来实现的。在实际示例中,您可能会改为绑定值,但此示例显示了使用 IsThreeState 属性创建“全部切换”效果的基础知识。

浙公网安备 33010602011771号