This article has been localized into Hungarian by the community.
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.