TOC

This article has been localized into Danish by the community.

Basale kontroller:

CheckBox kontrollen

CheckBox kontrollen tillader slutbrugeren at slå en valgmulighed til eller fra, oftest i forbindelse med en Boolean værdi i code-behind. Lad os gå direkte til et eksempel i tilfælde af, at du ikke er sikker på hvordan, en CheckBox ser ud:

<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>

Som du kan se, er CheckBox kontrollen meget let at bruge. På den anden CheckBox bruger jeg IsChecked egenskaben for at have den markeret som standard, men bortset fra det kræves ingen egenskaber for at bruge den. IsChecked egenskaben bør også bruges fra code-behind hvis du vil kontrollere om en bestemt CheckBox er markeret eller ej.

Brugerdefineret indhold

CheckBox kontrollen nedarver fra ContentControl klassen, hvilket betyder, at den kan tage brugerdefinret indhold og vise ved sidden af den. Hvis du angiver et stykke tekst, som jeg gjorde i eksemplet ovenfor, vil WPF putte det ind i en TextBlock kontrol og vise det, men det er kun en genvej for at gøre tingene nemt. Du kan bruge en hvilken som helst type kontrol inde i den, som vi vil se i det næste eksempel:

<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>

Som du kan se i eksemplet, kan du gøre stort set hvad, du vil med indholdet. På alle tre afkrydsningsfelter gør jeg noget forskelligt med teksten, og på den midterste bruger jeg endda en Image kontrol. Ved at angive en kontrol som indhold i stedet for bare tekst, får vi meget mere kontrol over fremtoningen, og det seje er, at uanset hvilken del af indholdet, du klikker på, vil det aktivere CheckBox kontrollen og slå den til og fra.

IsThreeState egenskaben

Som nævnt svarer CheckBox kontrollen normalt til en boolean værdi, hvilket betyder, at den kun har to stadier: true eller false (til eller fra). Dog, eftersom en boolean datatype kan være null, er der i praksis en tredje mulighed (true, false eller null), har CheckBox kontrollen også understøttelse af dette. Ved at sætte IsThreeState egenskaben til true, vil CheckBox kontrollen få et tredje stadie kalddet "det ubestemte stadie".

En almindelig brug af dette er at have en "Aktiver alle" CheckBok, som kontrollerer et sæt underordnede afkrydsningsfelter og også viser deres samlede stadie. Vores eksempel viser hvordan, du kan lave en liste af funktioner, der kan slås til og fra, med en fælles "Aktiver alle" CheckBox i toppen:

<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;
		}

	}
}

Dette eksempel virker fra to forskellige vinkler: Hvis du markerer eller afmarkerer "Aktiver alle" CheckBox kontrollen, vil alle underordnede afkrydsningsfelter, hver repræsenterende en programfunktion i vores eksempel, blive enten markerete eller afmarkeret. Det virker også den anden vej, hvor markering eller afmarkering af en underordnet CheckBox har indflydelse på "Aktiver alle" CheckBox stadie: Hvis de alle er markeret eller afmarkeret, vil "Aktiver alle" CheckBox få samme stadie - ellers vil værdien bliver efterladt med en null værdi, som tvinger CheckBox kontrollen ind i det ubestemte stadie.

Al den opførsel kan ses på skærmbillederne ovenfor, og det opnås ved at abonnere på Checked og Unchecked hændelserne på CheckBox kontroollen. I et reelt eksempel vil du sikkert binde værdierne i stedet, men dette eksempel viser det grunddlæggende i at bruge IsThreeState egenskaben for at lave en "Skift alle" effekt.


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!