text: Check boxes.
  Important APIs: CheckBox class, Checked event, IsChecked property
  Is this the right control?
  Use a single check box for a binary yes/no choice, such as with a "Remember me?" login scenario or with a terms of service agreement.
  For a binary choice, the main difference between a check box and a toggle switch is that the check box is for status and the toggle switch is for action. You can delay committing a check box interaction (as part of a form submit, for example), while you should immediately commit a toggle switch interaction. Also, only check boxes allow for multi-selection.
  Use multiple check boxes for multi-select scenarios in which a user chooses one or more items from a group of choices that are not mutually exclusive.
  Create a group of check boxes when users can select any combination of options.
  When options can be grouped, you can use an indeterminate check box to represent the whole group. Use the check box's indeterminate state when a user selects some, but not all, sub-items in the group.
  Both check box and radio button controls let the user select from a list of options. Check boxes let the user select a combination of options. In contrast, radio buttons let the user make a single choice from mutually exclusive options. When there is more than one option but only one can be selected, use a radio button instead.
  Examples
  Create a checkbox
  To assign a label to the checkbox, set the Content property. The label displays next to the checkbox.
  This XAML creates a single check box that is used to agree to terms of service before a form can be submitted.
  <CheckBox x:
  Here's the same check box created in code.
  CheckBox checkBox1 = new CheckBox(); checkBox1.Content = "I agree to the terms of service.";
  Bind to IsChecked
  Use the IsChecked property to determine whether the check box is checked or cleared. You can bind the value of the IsChecked property to another binary value. However, because IsChecked is a nullable boolean value, you must use a value converter to bind it to a boolean value.
  In this example, the IsChecked property of the check box to agree to terms of service is bound to the IsEnabled property of a Submit button. The Submit button is enabled only if the terms of service are agreed to.
  Note We only show the relevant code here. For more info about data binding and value converters, see Data binding overview.
  ... <Page.Resources> <local:NullableBooleanToBooleanConverter x: </Page.Resources> ... <StackPanel Grid. <CheckBox x: <Button Content="Submit" IsEnabled="{x:Bind termsOfServiceCheckBox.IsChecked, Converter={StaticResource NullableBooleanToBooleanConverter}, Mode=OneWay}"/> </StackPanel>
  public class NullableBooleanToBooleanConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { if (value is bool?) { return (bool)value; } return false; } public object ConvertBack(object value, Type targetType, object parameter, string language) { if (value is bool) return (bool)value; return false; } }
  Handle Click and Checked events
  To perform an action when the check box state changes, you can handle either the Click event, or the Checked and Unchecked events.
  The Click event occurs whenever the checked state changes. If you handle the Click event, use the IsChecked property to determine the state of the check box.
  The Checked and Unchecked events occur independently. If you handle these events, you should handle both of them to respond to state changes in the check box.
  In the following examples, we show handling the Click event, and the Checked and Unchecked events.
  Multiple checkboxes can share the same event handler. This example creates four checkboxes for selecting pizza toppings. The four checkboxes share the same Click event handler to update the list of selected toppings.
  <StackPanel Margin="40"> <TextBlock Text="Pizza Toppings"/> <CheckBox Content="Pepperoni" x: <CheckBox Content="Beef" x: <CheckBox Content="Mushrooms" x: <CheckBox Content="Onions" x: <!-- Display the selected toppings. --> <TextBlock Text="Toppings selected:"/> <TextBlock x: </StackPanel>
  Here's the event handler for the Click event. Every time a checkbox is clicked, it examines the checkboxes to see which ones are checked and update list of selected toppings.
  private void toppingsCheckbox_Click(object sender, RoutedEventArgs e) { string selectedToppingsText = string.Empty; CheckBox[] checkboxes = new CheckBox[] { pepperoniCheckbox, beefCheckbox, mushroomsCheckbox, onionsCheckbox }; foreach (CheckBox c in checkboxes) { if (c.IsChecked == true) { if (selectedToppingsText.Length > 1) { selectedToppingsText += ", "; } selectedToppingsText += c.Content; } } toppingsList.Text = selectedToppingsText; }
  Use the indeterminate state
  The CheckBox control inherits from ToggleButton and can have three states:
  For the check box to report the indeterminate state, you must set the IsThreeState property to true.
  When options can be grouped, you can use an indeterminate check box to represent the whole group. Use the check box's indeterminate state when a user selects some, but not all, sub-items in the group.
  In the following example, the "Select all" checkbox has its IsThreeState property set to true. The "Select all" checkbox is checked if all child elements are checked, unchecked if all child elements are unchecked, and indeterminate otherwise.
  <StackPanel> <CheckBox x: <CheckBox x: <CheckBox x: <CheckBox x: </StackPanel>
  private void Option_Checked(object sender, RoutedEventArgs e) { SetCheckedState(); } private void Option_Unchecked(object sender, RoutedEventArgs e) { SetCheckedState(); } 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; } else { // Set third state (indeterminate) by setting IsChecked to null. OptionsAllCheckBox.IsChecked = null; } } }
  Do's and don'ts
  Verify that the purpose and current state of the check box is clear.
  Limit check box text content to no more than two lines.
  Word the checkbox label as a statement that the check mark makes true and the absence of a check mark makes false.
  Use the default font unless your brand guidelines tell you to use another.
  If the text content is dynamic, consider how the control will resize and what will happen to visuals around it.
  If there are two or more mutually exclusive options from which to choose, consider using radio buttons.
  Don't put two check box groups next to each other. Use group labels to separate the groups.
  Don't use a check box as an on/off control or to perform a command; instead, use a toggle switch.
  Don't use a check box to display other controls, such as a dialog box.
  Use the indeterminate state to indicate that an option is set for some, but not all, sub-choices.
  When using indeterminate state, use subordinate check boxes to show which options are selected and which are not. Design the UI so that the user can get see the sub-choices.
  Don't use the indeterminate state to represent a third state. The indeterminate state is used to indicate that an option is set for some, but not all, sub-choices. So, don't allow users to set an indeterminate state directly. For an example of what not to do, this check box uses the indeterminate state to indicate medium spiciness:
  Instead, use a radio button group that has three options: Not spicy, Spicy, and Extra spicy.
  Get the sample code
  - XAML Controls Gallery sample - See all the XAML controls in an interactive format.
  Related articles
  Feedback
  Send feedback about: