WPF基础五:UI②内容元素CheckBox


ToggleButton

可切换状态的控件基类,例如 CheckBox

ToggleButton是 ContentControl ,这意味着它可以包含任何类型的单个对象 (例如字符串、图像或面板) 。 有关更多信息,请参见 ContentControl 类。

IsChecked属性指定 ToggleButton 的状态。 IsThreeState属性指定 ToggleButton 是否有两种或三种状态。

若要对多个 ToggleButton 控件应用相同的属性设置,请使用 Style 属性。 您可以修改 ControlTemplate 默认值,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 ToggleButton 的部分和状态,请参阅 切换按钮样式和模板

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。

https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.controls.primitives.togglebutton.ischecked?view=net-5.0

字段

名称备注权限
CheckedEvent标识 Checked 路由事件public
IndeterminateEvent标识 Indeterminate 路由事件public
IsCheckedProperty标识 IsChecked 依赖项属性public
IsThreeStateProperty标识 IsThreeState 依赖项属性public
UncheckedEvent标识 Unchecked 路由事件public

属性

名称备注权限
IsChecked获取或设置是否选中 ToggleButtonpublic
IsThreeState决定控件是支持两种状态还是支持三种状态public

方法

名称备注权限
OnChecked当 ToggleButton 引发 Checked 事件时调用 protected
OnClick当用鼠标或键盘单击控件时调用 protected
OnCreateAutomationPeer提供 ToggleButtonAutomationPeer 此控件的适当实现,作为 WPF 基础结构的一部分 protected
OnIndeterminate当 ToggleButton 引发 Indeterminate 事件时调用 protected
OnToggle由 OnClick() 方法调用以实现切换行为 protected
OnUncheckedToggleButton 引发 Unchecked 事件时调用 protected
ToString返回 ToggleButton 对象的字符串表示形式public

事件

名称备注权限
Checked在选中 ToggleButton 时发生public
Indeterminate在 ToggleButton 的状态既不是开也不是关时发生public
Unchecked在未选中 ToggleButton 时发生public

 


CheckBox

表示用户可以选择和清除的控件。

CheckBox 控件从 ToggleButton 中继承,并且可以有三种状态:选中 (选中) 、取消选中 (清除) 和不确定。

CheckBox是 ContentControl ,这意味着它可以包含任何类型的单个对象 (例如字符串、图像或面板) 。 有关更多信息,请参见 ContentControl 类。

若要对多个 CheckBox 控件应用相同的属性设置,请使用 Style 属性。 您可以修改 ControlTemplate 默认值,为控件指定独特的外观。 有关创建 ControlTemplate 的详细信息,请参阅 通过创建 System.windows.controls.controltemplate> 自定义现有控件的外观。 若要查看特定于 CheckBox 的部分和状态,请参阅 复选框样式和模板

此控件的依赖属性可能由控件的默认样式设置。 如果按默认样式设置属性,则当控件出现在应用程序中时,属性可能会更改为默认值。 默认样式取决于应用程序运行时使用的桌面主题。 有关详细信息,请参阅 默认的 WPF 主题

只有视觉对象属性已存在于控件的默认模板中并且已使用 TemplateBinding 设置时,设置该属性才有效。 在通过创建 ControlTemplate 自定义现有控件的外观一文的更改控件的视觉结构部分可以找到视觉属性列表。

https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.controls.checkbox?view=net-5.0

方法

名称备注权限
OnAccessKey调用 CheckBox 的访问键时调用protected
OnCreateAutomationPeer为 CheckBox 创建一个 AutomationPeerprotected
OnKeyDown响应 CheckBoxKeyDown 事件protected

ToggleButton

ToggleButton.IsChecked

public bool? IsChecked { get; set; }

获取或设置是否选中 ToggleButtonNullable<Boolean>。

如果 ToggleButton 已选中,则为 true;如果 ToggleButton 未选中,则为 false;否则为 null。 默认值为 false

ToggleButton.IsThreeState

public bool IsThreeState { get; set; }

决定控件是支持两种状态还是支持三种状态。

如果控件支持三种状态,则为 true;否则为 false。 默认值为 false

IsChecked当为时,属性可以设置为 null 第三种 IsThreeState 状态 true 。

ToggleButton.OnChecked(RoutedEventArgs) 

protected virtual void OnChecked (System.Windows.RoutedEventArgs e);

当 ToggleButton 引发 Checked 事件时调用。

ToggleButton.OnClick

protected override void OnClick ();

当用鼠标或键盘单击控件时调用。

ToggleButton.OnCreateAutomationPeer

protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer ();

提供 ToggleButtonAutomationPeer 此控件的适当实现,作为 WPF 基础结构的一部分。

ToggleButton.OnIndeterminate(RoutedEventArgs) 

protected virtual void OnIndeterminate (System.Windows.RoutedEventArgs e);

当 ToggleButton 引发 Indeterminate 事件时调用。

ToggleButton.OnToggle 

protected internal virtual void OnToggle ();

由 OnClick() 方法调用以实现切换行为。此方法将切换 IsChecked 属性。

Unchecked(RoutedEventArgs)

protected virtual void OnUnchecked (System.Windows.RoutedEventArgs e);

当 ToggleButton 引发 Unchecked 事件时调用。

ToggleButton.ToString

public override string ToString ();

返回 ToggleButton 对象的字符串表示形式。

ToString方法返回一个字符串,该字符串包含 Content 属性的和值 IsChecked 。

ToggleButton.Checked

public event System.Windows.RoutedEventHandler Checked;

在选中 ToggleButton 时发生。

ToggleButton.Indeterminate

public event System.Windows.RoutedEventHandler Indeterminate;

在 ToggleButton 的状态既不是开也不是关时发生。

ToggleButton.Unchecked

public event System.Windows.RoutedEventHandler Unchecked;

在未选中 ToggleButton 时发生。


CheckBox

CheckBox.OnAccessKey(AccessKeyEventArgs) 

protected override void OnAccessKey (System.Windows.Input.AccessKeyEventArgs e);

调用 CheckBox 的访问键时调用。

CheckBox.OnCreateAutomationPeer

protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer ();

为 CheckBox 创建一个 AutomationPeer

CheckBox.OnKeyDown(KeyEventArgs) 

protected override void OnKeyDown (System.Windows.Input.KeyEventArgs e);

响应 CheckBoxKeyDown 事件。

如果重写 OnKeyDown(KeyEventArgs) ,请始终在实现中调用基实现 OnKeyDown(KeyEventArgs) 。


XAML范例

<Window
    x:Class="CheckBoxDemo.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:local="clr-namespace:CheckBoxDemo"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <CheckBox
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            HorizontalContentAlignment="Center"
            Background="LightSkyBlue"
            BorderBrush="DarkRed"
            BorderThickness="2"
            Content="_CheckBoxTest"
            IsThreeState="True" 
            Indeterminate="CheckBox_Indeterminate"
            Checked="CheckBox_Checked"
            Unchecked="CheckBox_Unchecked" Click="CheckBox_Click" KeyDown="CheckBox_KeyDown"
           
            />
    </Grid>
</Window>

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
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 CheckBoxDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void CheckBox_Indeterminate(object sender, RoutedEventArgs e)
        {
            MessageBox.Show((sender as CheckBox).IsChecked.ToString());
        }

        private void CheckBox_Checked(object sender, RoutedEventArgs e)
        {
            MessageBox.Show((sender as CheckBox).IsChecked.ToString());
        }

        private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
        {
            MessageBox.Show((sender as CheckBox).IsChecked.ToString());
        }

        private void CheckBox_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("CheckBox is Clicked");
        }

        private void CheckBox_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show("CCheckBox_KeyDown");
        }
    }
}

 Content="_CheckBoxTest"  指定快捷键是Alt+C

运行:

单击、Alt+C 会引发Indeterminate、Checked、Unchecked事件中的一种,这里设置 IsThreeState="True" 。

任一按键按下

鼠标单击

注意的是快捷键Alt+C会引起KeyDown事件和Click事件。运行代码的时候可以取消KeyDown事件测试。

 


C#范例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
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 CheckBoxDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            CheckBox checkBox = new CheckBox();
            checkBox.IsThreeState = true;
            checkBox.BorderBrush = Brushes.DarkRed;
            checkBox.Background = Brushes.LightSkyBlue;
            checkBox.BorderThickness = new Thickness(2);
            checkBox.HorizontalAlignment = HorizontalAlignment.Center;
            checkBox.VerticalAlignment = VerticalAlignment.Center;
            checkBox.HorizontalContentAlignment = HorizontalAlignment.Center;
            checkBox.Content = "_CheckBoxTest";
            checkBox.Indeterminate += CheckBox_Indeterminate;
            checkBox.Checked += CheckBox_Checked;
            checkBox.Unchecked += CheckBox_Unchecked;
            checkBox.Click += CheckBox_Click;
            //checkBox.KeyDown += CheckBox_KeyDown;

            ((this as Window).Content as Grid).Children.Add(checkBox);
        }

        private void CheckBox_Indeterminate(object sender, RoutedEventArgs e)
        {
            MessageBox.Show((sender as CheckBox).IsChecked.ToString());
        }

        private void CheckBox_Checked(object sender, RoutedEventArgs e)
        {
            MessageBox.Show((sender as CheckBox).IsChecked.ToString());
        }

        private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
        {
            MessageBox.Show((sender as CheckBox).IsChecked.ToString());
        }

        private void CheckBox_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("CheckBox is Clicked");
        }

        private void CheckBox_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show("CCheckBox_KeyDown");
        }
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值