TOC

This article has been localized into Hungarian by the community.

Alap vezérlők:

A CheckBox vezérlő

A CheckBox vezérlő lehetővé teszi a felhasználónak a váltást igen/nem logikai értékek között. A változtatott érték logikai változó általában a háttér programkódban. Ugorjunk mindjárt egyenesen a programkódba ha nem tudjuk hogy néz ki a CheckBox vezérlő:

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

Amint láthatjuk, a CheckBox vezérlő használata nagyon egyszerű. A második CheckBox vezérlőben az IsChecked tulajdonság bejelöltre van állítva alapban, de ezen kívül egyéb tulajdonságot ne kell alkalmaznunk. Az IsChecked tulajdonság olvasható a háttér programkódban, amikor azt akarjuk megállapítani, hogy az adott vezérlő be van jelölve vagy sem.

Egyedi tartalom

A CheckBox vezérlő a ContentControl osztályból van származtatva, ami azt jelenti hogy a vezérlő felvehet egyedi tartalmakat és megjelenítheti azokat. Ha megadunk egy egyszerű szöveget , mint a mellékelt példában látható, a WPF elhelyezi azt egy TextBox vezérlő belsejében és megjeleníti, de ez csak egy rövidebb módszer arra, hogy egyszerűsítsük a feladatot. A fejlesztő elhelyezhet bármely vezérlőt belül, amint azt a lenti példából láthatjuk:

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

Amint azt a példában láthatjuk, nagyon sok mindent megtehetünk a vezérlő tartalmával. Mindhárom CheckBox vezérlőben más-más szöveget jelenítünk meg. A középső vezérlőben egy Image vezérlőt is elhelyeztünk. Ha vezérlőt adunk meg mint tartalmat, egyszerű szöveg helyett, akkor sokkal szélesebb határok között manipulálhatjuk a megjelenését a vezérlőnek, és az a szép a dologban, hogy mindegy hogy a vezérlő mely részére kattintunk, az aktiválja a CheckBox vezérlőt és az állapotot vált.

Az IsThreeState tulajdonság

Amint említettem, a CheckBox vezérlőhöz logikai érték tartozik, ami azt jelenti hogy két állapota van, az igaz és a hamis (bekapcsolt vagy kikapcsolt). Mivel azonban a logikai érték null értéket is felvehet, ezzel definiálva a harmadik lehetőséget, (igaz/hamis/null) a CheckBox vezérlő ezt is támogatja. Az IsThreeState tulajdonság igaz értékre állításával a vezérlő felveheti a harmadik állapotot is, aminek a neve "köztes állapot".

Az általános használata ennek az állapotnak a "Minden engedélyezve" CheckBox állapot, ami alkalmas egy CheckBox csoport ellenőrzésére és azok egységes állapotának kijelzésére. A példa programunkban látható hogy hogyan készíthetünk egy olyan listát, melyek tulajdonsága egyszerre váltható át a legfelül elhelyezett "Minden engedélyezve" CheckBox vezérlővel:

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

	}
}

Ez a példa kétféle szempontból is működik: Amennyiben bejelöljük vagy töröljük az 'Enable all' kapcsolót, akkor az összes gyermek objektum / kapcsoló is beállítódik vagy törlődik. Ugyanakkor ez fordítva is igaz, ha beállítunk vagy törlünk egy gyermek objektumot / kapcsolót az hatással lesz az 'Enable all' kapcsolóra is! Vagyis ha az összes gyermek ugyanabba a státuszba kerül akkor az 'Enable all' is felveszi azt a beállítást - ellenkező esetben nem meghatározható állapotban lesz. Ami jelen esetben 'null' értéket jelent.

Az összes lehetséges állapot látható a fenti példa-képen és úgy lehet működésre bírni ha feliratkozunk a c# forrásban a 'Checked' és 'Unchecked' eseményekre. Egy valós, működő alkalmazásban valószínűleg adat-kötéssel oldanánk meg inkább, de ez a példa jól szemlélteti a 'IsThreeState' ( három-állású kapcsoló ) használatának alapjait és a 'Toggle all' implementációját.


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!