/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class CheckBox : ToggleButton
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public class CheckBox : ToggleButton
Public Class CheckBox
Inherits ToggleButton
<CheckBox .../>
<CheckBox>
singleObject
</CheckBox>
<CheckBox>stringContent</CheckBox>
Object
IInspectable
DependencyObject
UIElement
FrameworkElement
Control
ContentControl
ButtonBase
ToggleButton
CheckBox
WinUI 3 库应用包括大多数 WinUI 3 控件、特性和功能的交互式示例。 通过 Microsoft Store 获取应用,或在 GitHub 上获取源代码
以下示例演示两个检查框控件。 第一个检查框演示选中状态和未选中状态。 第二个检查框演示选中、未选中和不确定状态。 可以选择控件以更改其外观,并查看它们处于哪个状态。
<!-- A two-state CheckBox. -->
<CheckBox x:Name="cb1" Content="Two-state CheckBox"
Checked="HandleCheck" Unchecked="HandleUnchecked" />
<TextBlock x:Name="text1" />
<!-- A three-state CheckBox. -->
<CheckBox x:Name="cb2" Content="Three-state CheckBox"
IsThreeState="True" Indeterminate="HandleThirdState"
Checked="HandleCheck" Unchecked="HandleUnchecked" />
<TextBlock x:Name="text2" />
private void HandleCheck(object sender, RoutedEventArgs e)
CheckBox cb = sender as CheckBox;
if (cb.Name == "cb1") text1.Text = "Two-state CheckBox checked.";
else text2.Text = "Three-state CheckBox checked.";
private void HandleUnchecked(object sender, RoutedEventArgs e)
CheckBox cb = sender as CheckBox;
if (cb.Name == "cb1") text1.Text = "Two-state CheckBox unchecked.";
else text2.Text = "Three-state CheckBox unchecked.";
private void HandleThirdState(object sender, RoutedEventArgs e)
CheckBox cb = sender as CheckBox;
text2.Text = "Three-state CheckBox indeterminate.";
Private Sub HandleCheck(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim cb As CheckBox = CType(sender, CheckBox)
If (cb.Name = "cb1") Then
text1.Text = "Two state CheckBox checked."
text2.Text = "Three state CheckBox checked."
End If
End Sub
Private Sub HandleUnchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim cb As CheckBox = CType(sender, CheckBox)
If (cb.Name = "cb1") Then
text1.Text = "Two state CheckBox unchecked."
text2.Text = "Three state CheckBox unchecked."
End If
End Sub
Private Sub HandleThirdState(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim cb As CheckBox = CType(sender, CheckBox)
text2.Text = "Three state CheckBox indeterminate."
End Sub
<StackPanel>
<CheckBox x:Name="OptionsAllCheckBox" Content="Select all" IsThreeState="True"
Checked="SelectAll_Checked" Unchecked="SelectAll_Unchecked" Indeterminate="SelectAll_Indeterminate"/>
<CheckBox x:Name="Option1CheckBox" Content="Option 1" Margin="24,0,0,0"
Checked="Option_Checked" Unchecked="Option_Unchecked"/>
<CheckBox x:Name="Option2CheckBox" Content="Option 2" Margin="24,0,0,0"
Checked="Option_Checked" Unchecked="Option_Unchecked" IsChecked="True"/>
<CheckBox x:Name="Option3CheckBox" Content="Option 3" Margin="24,0,0,0"
Checked="Option_Checked" Unchecked="Option_Unchecked"/>
</StackPanel>
private void SelectAll_Checked(object sender, RoutedEventArgs e)
Option1CheckBox.IsChecked = Option2CheckBox.IsChecked = Option3CheckBox.IsChecked = true;
private void SelectAll_Unchecked(object sender, RoutedEventArgs e)
Option1CheckBox.IsChecked = Option2CheckBox.IsChecked = Option3CheckBox.IsChecked = false;
private void SelectAll_Indeterminate(object sender, RoutedEventArgs e)
// If the SelectAll box is checked (all options are selected),
// clicking the box will change it to its indeterminate state.
// Instead, we want to uncheck all the boxes,
// so we do this programatically. The indeterminate state should
// only be set programatically, not by the user.
if (Option1CheckBox.IsChecked == true &&
Option2CheckBox.IsChecked == true &&
Option3CheckBox.IsChecked == true)
// This will cause SelectAll_Unchecked to be executed, so
// we don't need to uncheck the other boxes here.
OptionsAllCheckBox.IsChecked = false;
private void SetCheckedState()
// Controls are null the first time this is called, so we just
// need to perform a null check on any one of the controls.
if (Option1CheckBox != null)
if (Option1CheckBox.IsChecked == true &&
Option2CheckBox.IsChecked == true &&
Option3CheckBox.IsChecked == true)
OptionsAllCheckBox.IsChecked = true;
else if (Option1CheckBox.IsChecked == false &&
Option2CheckBox.IsChecked == false &&
Option3CheckBox.IsChecked == false)
OptionsAllCheckBox.IsChecked = false;
// Set third state (indeterminate) by setting IsChecked to null.
OptionsAllCheckBox.IsChecked = null;
private void Option_Checked(object sender, RoutedEventArgs e)
SetCheckedState();
private void Option_Unchecked(object sender, RoutedEventArgs e)
SetCheckedState();
有关详细信息、设计指南和代码示例,请参阅 复选框。
CheckBox 是用户可以选择或清除的控件。
使用 CheckBox 控件提供用户可以选择的选项列表,例如要应用于应用程序的设置列表。 CheckBox 和 RadioButton 控件都允许用户从选项列表中进行选择。 CheckBox 控件允许用户选择选项组合。 相比之下, RadioButton 控件允许用户从互斥选项中进行选择。
CheckBox 控件继承自 ToggleButton,可拥有三种状态:
State
要使 CheckBox 报告不确定状态,必须将 IsThreeState 属性设置为 true。
控件样式和模板
可以修改默认 的 Style 和 ControlTemplate ,使控件具有唯一的外观。 有关修改控件的样式和模板的信息,请参阅 XAML 样式。 XAML 还包括可用于在不修改控件模板的情况下修改不同视觉状态中的控件颜色的资源。 修改这些资源是首选设置属性,如 Background 和 Foreground。 有关详细信息,请参阅 XAML 样式一文的轻量级样式部分。
GitHub 上 CheckBox_themeresources.xaml 文件的 ThemeDictionaries 部分中列出了此控件的资源。 ResourceKey
每个 的值引用 StaticResource
Common_themeresources_any.xaml 文件中的画笔和颜色。
DispatcherQueue
获取与此对象关联的 。 表示 DispatcherQueue
一个可以在 UI 线程上访问 DependencyObject
的设施,即使代码是由非 UI 线程启动的。
(继承自 DependencyObject)
获取或设置文本和其他 UI 元素在控制其布局的任何父元素中的流动方向。 此属性可以设置为 LeftToRight
或 RightToLeft
。 在任何元素上将 设置为 FlowDirection
RightToLeft
,会将对齐方式设置为向右,将阅读顺序设置为从右到左,并将控件的布局设置为从右到左流动。
(继承自 FrameworkElement)
获取或设置 UIElement (使用的 UI 主题及其子元素) 用于资源确定。 使用 RequestedTheme
指定的 UI 主题可以替代应用级 RequestedTheme。
(继承自 FrameworkElement)
对于Windows 10 创意者更新 (内部版本 10.0.15063) 及更新版本,TabFocusNavigation 属性在 UIElement 基类上可用,以包括选项卡序列中不使用 ControlTemplate 的对象。
(继承自 Control)
为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。 指定 handledEventsToo
为 true
以调用提供的处理程序,即使在其他位置处理事件也是如此。
(继承自 UIElement)
汇报 UIElement 的 DesiredSize。 通常,为其布局子级实现自定义布局的对象从其自己的 MeasureOverride 实现中调用此方法,以形成递归布局更新。
(继承自 UIElement)
每当应用程序代码或内部进程 (例如重新生成布局传递) 调用 ApplyTemplate 时调用。 简单来说,这意味着在 UI 元素在应用中显示之前调用 方法。 重写此方法以影响类的默认模板后逻辑。
(继承自 FrameworkElement)
在应用中处理 键盘快捷方式 (或快捷键) 之前调用。 每当应用程序代码或内部进程调用 ProcessKeyboardAccelerators 时调用。 重写此方法以影响默认加速器处理。
(继承自 UIElement)
在释放之前启动 Press 操作的指针设备时发生,而此元素中。 请注意, 不保证“按下 ”操作的结束会触发 PointerReleased
事件;其他事件可能会触发。 有关详细信息,请参阅备注。
(继承自 UIElement)