TOC

This article has been localized into Turkish by the community.

Temel Kontroller:

CheckBox Kontrolü

CheckBox kontrolü son kullanıcının bir seçimi aktif ya da pasif etmesine imkan tanır, genellikle arkaplan kodunda Boolean bir değer verir. Eğer bir CheckBox neye benziyor bilmiyorsanız, hadi direk bir örnek yapalım :

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

Gördüğünüz gibi CheckBox kullanmak oldukça kolay. İkinci CheckBox'ta IsChecked özelliğini kullanarak default olarak seçili gelmesini sağladım fakat bundan başka bir özellik olmadan kullanabiliriz. IsChecked özelliğini arkaplan kodunda CheckBox seçili mi değil mi bilmek için kullanılmalıdır.

İsteğe bağlı içerik

CheckBox kontrolü ContentControl sınıfından türetilmiştir, yani içeriğinde kontroller olur. Eğer sadece düz yazı girerseniz WPF bunu bir TextBlock olarak içeriğe koyar ve gösterir, yani içeriğe bir kontrol konur, ama isterseniz başka kontrolleri de sonraki örnekteki gibi kullanabilirsiniz :

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

Örneğin yapısını incelerseniz içerikte istediğinizi yapabileceğinizi görürsünüz. Mevcut 3 CheckBox kontrolün her birinde farklı yazılar kulandım , hatta ortadakinde bir Image kontrolü bile kullandım. İçerikte yazı yerine kontrol kullanabilmek bize görünümde çok daha fazla hakimiyet getirir, işin güzel yanı bu içerikte nereye tıklarsanız CheckBox durum değiştirecektir.

IsThreeState özelliği

Daha önce bahsettik CheckBox genellikle bir boolean değer verir, yani sadece 2 olasılık var true ya da false (aktif ya da pasif). Amma ve lakin boolean bir değer null olabileceği için mantık olarak üçüncü bir opsiyon daha var (true, false ya da null). CheckBox kontrol bu olasılığı da destekler. IsThreeState özelliğini true yaparak CheckBox üçüncü durumu "belirsiz durum" olarak alacaktır.

Buna en güzel örnek "Tümünü seç" CheckBox'larıdır, görselde kapsamında gösterilen tüm CheckBox'ların kontrolünü bir yerden yapar. Örneğimizde birden fazla özelliğin en üstteki "Enable all" CheckBox ile birlikte aktif pasif edilmesi görünüyor :

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

	}
}

Bu örnek iki değişik açıdan çalışıyor : "Enable all" CheckBox tıklanınca altındaki tüm uygulama seçenekleri de beraber aktif ya da pasif olur. Ayrıca ters yönde de çalışır, altındaki özelliklerin seçimi de "Enable all" CheckBox değerini etkiler. Eğer üçü birden seçiliyse ya da seçili değilse "Enable all" CheckBox ta o değeri alır, bunun dışında ise belirsiz duruma geçirilir.

Tüm bu davranışlar yukarıdaki ekran görüntülerinde mevcut, ve CheckBox kontrollerin Checked ve Unchecked olaylarını işleyerek gerçekleştirilir. Gerçek dünyadan bir örnekte bunun yerine değerleri birbirine bağlarsınız , ama bu örnek IsThreeState özelliği ile nasıl hepsinin konum değiştirilttiğini göstermek için.


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!