TOC

This article has been localized into Portuguese by the community.

Controles básicos:

O controle CheckBox

O controle CheckBox permite que o usuário final ative ou desative uma opção, geralmente refletindo um valor booleano no Code-behind. Vamos pular direto para um exemplo, caso você não tenha certeza do aspecto de uma CheckBox:

<Window x:Class="WpfTutorialSamples.Basic_controls.CheckBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CheckBoxSample" Height="140" Width="250">
    <StackPanel Margin="10">
		<Label FontWeight="Bold">Application Options</Label>
		<CheckBox>Enable feature ABC</CheckBox>
		<CheckBox IsChecked="True">Enable feature XYZ</CheckBox>
		<CheckBox>Enable feature WWW</CheckBox>
	</StackPanel>
</Window>

Como você pode ver, o CheckBox é muito fácil de usar. No segundo CheckBox, eu uso a propriedade IsChecked para que ela seja marcada por padrão, mas além disso, nenhuma propriedade é necessária para usá-la. A propriedade IsChecked também deve ser usada a partir do Code-behind, se você quiser verificar se uma determinada CheckBox está marcada ou não.

Conteúdo customizado

O controle CheckBox herda da classe ContentControl, o que significa que ele pode receber conteúdo personalizado e exibir próximo a ele. Se você acabou de especificar um pedaço de texto, como eu fiz no exemplo acima, o WPF irá colocá-lo dentro de um controle TextBlock e exibi-lo, mas isso é apenas um atalho para facilitar as coisas para você. Você pode usar qualquer tipo de controle dentro dele, como veremos no próximo exemplo:

<Window x:Class="WpfTutorialSamples.Basic_controls.CheckBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CheckBoxSample" Height="140" Width="250">
    <StackPanel Margin="10">
		<Label FontWeight="Bold">Application Options</Label>
		<CheckBox>
			<TextBlock>
				Enable feature <Run Foreground="Green" FontWeight="Bold">ABC</Run>
			</TextBlock>
		</CheckBox>
		<CheckBox IsChecked="True">
			<WrapPanel>
				<TextBlock>
					Enable feature <Run FontWeight="Bold">XYZ</Run>
				</TextBlock>
				<Image Source="/WpfTutorialSamples;component/Images/question.png" Width="16" Height="16" Margin="5,0" />
			</WrapPanel>
		</CheckBox>
		<CheckBox>
			<TextBlock>
				Enable feature <Run Foreground="Blue" TextDecorations="Underline" FontWeight="Bold">WWW</Run>
			</TextBlock>
		</CheckBox>
	</StackPanel>
</Window>

Como você pode ver na marcação de exemplo, você pode fazer praticamente o que quiser com o conteúdo. Em todas as três caixas de seleção, eu faço algo diferente com o texto, e no meio eu lanço um controle de imagem. Ao especificar um controle como o conteúdo, em vez de apenas texto, temos muito mais controle sobre a aparência, e o legal é que não importa em que parte do conteúdo você clica, ele ativará o CheckBox e o ativará ou desativará. .

A propriedade IsThreeState

Como mencionado, o CheckBox geralmente corresponde a um valor booleano, o que significa que ele só tem dois estados: verdadeiro ou falso (ligado ou desligado). No entanto, como um tipo de dados booleano pode ser anulável, permitindo efetivamente uma terceira opção (true, false ou null), o controle CheckBox também pode suportar esse caso. Definindo a propriedade IsThreeState como true, a CheckBox obterá um terceiro estado chamado "o estado indeterminado".

Um uso comum para isso é ter uma CheckBox "Enable all", que pode controlar um conjunto de caixas de seleção filho, bem como mostrar seu estado coletivo. Nosso exemplo mostra como você pode criar uma lista de recursos que podem ser ativados e desativados, com uma CheckBox comum "Ativar todos" na parte superior:

<Window x:Class="WpfTutorialSamples.Basic_controls.CheckBoxThreeStateSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CheckBoxThreeStateSample" Height="170" Width="300">
	<StackPanel Margin="10">
		<Label FontWeight="Bold">Application Options</Label>
		<StackPanel Margin="10,5">
			<CheckBox IsThreeState="True" Name="cbAllFeatures" Checked="cbAllFeatures_CheckedChanged" Unchecked="cbAllFeatures_CheckedChanged">Enable all</CheckBox>
			<StackPanel Margin="20,5">
				<CheckBox Name="cbFeatureAbc" Checked="cbFeature_CheckedChanged" Unchecked="cbFeature_CheckedChanged">Enable feature ABC</CheckBox>
				<CheckBox Name="cbFeatureXyz" IsChecked="True" Checked="cbFeature_CheckedChanged" Unchecked="cbFeature_CheckedChanged">Enable feature XYZ</CheckBox>
				<CheckBox Name="cbFeatureWww" Checked="cbFeature_CheckedChanged" Unchecked="cbFeature_CheckedChanged">Enable feature WWW</CheckBox>
			</StackPanel>
		</StackPanel>
	</StackPanel>
</Window>
using System;
using System.Windows;

namespace WpfTutorialSamples.Basic_controls
{
	public partial class CheckBoxThreeStateSample : Window
	{
		public CheckBoxThreeStateSample()
		{
			InitializeComponent();
		}


		private void cbAllFeatures_CheckedChanged(object sender, RoutedEventArgs e)
		{
			bool newVal = (cbAllFeatures.IsChecked == true);
			cbFeatureAbc.IsChecked = newVal;
			cbFeatureXyz.IsChecked = newVal;
			cbFeatureWww.IsChecked = newVal;
		}

		private void cbFeature_CheckedChanged(object sender, RoutedEventArgs e)
		{
			cbAllFeatures.IsChecked = null;
			if((cbFeatureAbc.IsChecked == true) && (cbFeatureXyz.IsChecked == true) && (cbFeatureWww.IsChecked == true))
				cbAllFeatures.IsChecked = true;
			if((cbFeatureAbc.IsChecked == false) && (cbFeatureXyz.IsChecked == false) && (cbFeatureWww.IsChecked == false))
				cbAllFeatures.IsChecked = false;
		}

	}
}

Este exemplo funciona de duas formas diferentes: Se você marcar ou desmarcar a caixa de seleção "Enable all", todas as caixas filhas de seleção, cada uma representando um recurso do aplicativo em nosso exemplo, serão marcadas ou desmarcadas. Ele também funciona ao contrário, onde marcar ou desmarcar um CheckBox filho, afeta o estado "Enable all" do CheckBox: se todos eles estiverem marcados ou desmarcados, a caixa de seleção "Enable all" assume o mesmo estado deles - caso contrário o valor será deixado com um nulo, que força a CheckBox a assumir o estado de indeterminado.

Todo esse comportamento pode ser visto nas imagens acima e é obtido inscrevendo-se nos eventos Checked e Unchecked dos controles CheckBox. Em um exemplo do mundo real, você provavelmente vincularia os valores, mas este exemplo mostra os fundamentos do uso da propriedade IsThreeState para criar um efeito "Toggle all".


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!