Makale Özeti

Bu yazımızda Silverlight 2 içerisinde CheckBox ve RadioButton gibi kontrollerin türetildiği Base Control olan ToggleButton'un kullanımını inceliyoruz.

Makale

Checkbox ve RadioButton kontrolleri neredeyse her projede en az bir defa kullandığımız kontroller arasında yerlerini alırlar. Bu kontroller gibi farklı kontroller oluşturarak kullanıcıyı bir durumdan haberdar etmek veya kullanıcının bir durumu değiştirmesini sağlamak mümkün olabilir. Örneğin basit bir video oynatıcısı uygulamasında "Play" düğmesi ile "Pause" düğmesini aynı düğme içerisinde kullanabilirsiniz. Söz konusu düğme kendi içinde değişerek her tıklandığında "Play" veya "Pause" şeklinde üzerindeki yazıyı değiştirir ve videonun da durdurulmasını veya oynatılmasını sağlar. Checkbox veya RadioButton düğmeleri gibi bu gibi kontrollere özünde "ToggleButton" denir ve Silverlight 2 Beta 1 içerisinde Checkbox ve RadioButton da zaten hali hazırda adı ToggleButton olan bir kontrol yapısından türetilmiştir. Bu yazımızda ToggleButton kontrolünün detaylarına ve kullanımına değineceğiz.

<UserControl x:Class="SilverlightApplication21.Page"

    xmlns="http://schemas.microsoft.com/client/2007"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Width="400" Height="300">

  <Grid x:Name="LayoutRoot" Background="White">

    <ToggleButton Margin="104,109,177,138" Content="ToggleButton" x:Name="ToggleDugme"/>

  </Grid>

</UserControl>

Yukarıdaki şekli ile standart bir ToggleButton kontrolünü ister Blend ister Visual Studio içerisinde uygulamanıza yerleştirebilirsiniz. Sonrasında arkaplanda ToggleButton kontrolünün yakalayabileceğimiz iki kendine özel event'ı var; bunlardan ilki Checked, diğeri ise Unchecked durumları. Yarattığımız ToggleButton'ın görsel özelliklerine değinmeden önce hemen bu event'lar ile neler yapabileceğimize bir göz atalım.

[VB]

Private Sub ToggleDugme_Checked(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles ToggleDugme.Checked

    ToggleDugme.Content = "İşaretli"

End Sub

 

Private Sub ToggleDugme_Unchecked(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles ToggleDugme.Unchecked

    ToggleDugme.Content = "İşaretsiz"

End Sub

[C#]

private void ToggleDugme_Checked(object sender, System.Windows.RoutedEventArgs e)

{

    ToggleDugme.Content = "İşaretli";

}

 

private void ToggleDugme_Unchecked(object sender, System.Windows.RoutedEventArgs e)

{

    ToggleDugme.Content = "İşaretsiz";

}

Basit bir şekilde ToggleButton kontrolümüzün içerisine yazılı metni değiştirdiğimiz örneğimizi çalıştırdığımızda artık Button görünümündeki ToggleButton kontrolüne her bastığımızda içinde duruma göre "İşaretli" veya "İşaretsiz" yazacak. Ayrıca isterseniz ToggleButton kontrolüne ait IsChecked özelliğini de kullanarak ToggleButton'un o anki durumundan haberdar olabilirsiniz.

Belirsiz durumlara özel...

Bazı durumlarda sadece iki seçenek yetmez ve "belirsizlik" seçimi de yapmak gerekebilir. Bu durumda kullanıcıya sadece Evet veya Hayır şeklinde cevap vermenin yanı sıra isterse "Bilmiyorum" gibi bir seçeneğe de yönelebilir. ToggleButton içerisinde böyle bir yapı da var. Eğer bir ToggleButton'un IsThreeState özelliğini True olarak ayarlarsanız artık iki değil üç seçenekli bir ToggleButton sahibi olmuş oluyorsunuz. Peki bu üçüncü seçeneği kod tarafında nasıl yakalıyoruz?

[VB]

Private Sub ToggleDugme_Checked(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles ToggleDugme.Checked

    ToggleDugme.Content = "İşaretli"

End Sub

 

Private Sub ToggleDugme_Indeterminate(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles ToggleDugme.Indeterminate

    ToggleDugme.Content = "Belirsiz"

End Sub

 

Private Sub ToggleDugme_Unchecked(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles ToggleDugme.Unchecked

    ToggleDugme.Content = "İşaretsiz"

End Sub

[C#]

private void ToggleDugme_Checked(object sender, System.Windows.RoutedEventArgs e)

{

    ToggleDugme.Content = "İşaretli";

}

 

private void ToggleDugme_Indeterminate(object sender, System.Windows.RoutedEventArgs e)

{

    ToggleDugme.Content = "Belirsiz";

}

 

private void ToggleDugme_Unchecked(object sender, System.Windows.RoutedEventArgs e)

{

    ToggleDugme.Content = "İşaretsiz";

}

Gördüğünüz gibi ToggleButton'un ayrıca bir de Indeterminate adında bir event-handler'ı bulunuyor. Söz konusu durumu yakalayarak belirsizlik halinde de gerekli işlemlerin yapılmasını sağlayabilirsiniz. Böyle bir durumda IsChecked özelliği geriye null / nothing döndürecektir.

Unutmayın ki herhangi bir kontrolün Content özelliği aslında içerisine farklı Silverlight kontrolleri de alabilir hatta kontrollerin görsel yapısının tamamen değiştirebilirsiniz. Silverlight 2 Beta 1 içerisinde Control Templating ile ilgili yazıyı inceleyerek ToggleButton için de aynı teknikleri uygulayabilirsiniz.

Hepinize kolay gelsin.