WPF CheckBox控件 我全都要

WPF CheckBox控件 我全都要

 

CheckBox控件允许选择一个或多个选项。

CheckBox控件具有一些基本的属性,这些属性可以帮助你自定义控件的显示和行为。

  • Content: 指定显示在CheckBox中的文本。
  • IsChecked: 指示CheckBox是否被选中的属性。
  • Width 和 Height: 设置CheckBox的宽度和高度。
  • Margin 和 Padding: 设置CheckBox边缘和内部的空白距离。
  • Foreground 和 Background: 设置文本和背景的颜色。

 

1
2
3
4
5
6
7
8
9
10
11
12
<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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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代码:

1
2
3
4
5
6
7
8
9
10
11
12
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 将获得称为“不确定状态”的第三种状态。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<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源文件代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 属性创建“全部切换”效果的基础知识。

 

posted @   Surfnet  阅读(201)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示