Merhabalar.
SQL ile veritabanı uygulamaları geliştirdiyseniz triggers kavramına yabancı değilsinizdir. Trigger’ın Türkçe karşılığı tetikleyicidir. WPF’de triggers’lar (tetikleyiciler) bir event gerçekleştiğinde devreye girecek olan event’ler (olaylar) veya bizim belirlediğimiz kod bloklarını çalıştıran yapılardır.
WPF’de Triggers’lara ne gerek var ki?
Biz zaten Windows Forms’da olduğu gibi WPF’de de codebehind tarafında karar mekanizmalarını (if, else, switch) kullanarak event’ler üzerinde istediğimiz sonuçları yakalayabiliyor ve kendi mekanizmamızı oluşturabiliyorduk ve halen oluşturabiliyoruzda. Ne gerek var triggers’lara?
WPF’de Triggers’lar ile eventleri XAML tarafında kullanabiliriz yani triggerslar sayesinde WPF element ya da kontrollerimizin eventlerini codebehind tarafında yazılıma ek yük ve kod kalabalığı getirmeden arayüz kısmında kullanabilme lüksüne sahibiz. Ayrıca animasyon, video, ses ve efektleri codebehind tarafında değil arayüz kısmında XAML ile gerçekleştirebiliyoruz ki bu büyük bir avantajdır.
WPF Triggers Çeşitleri
Tetikleyiciler TriggerBase sınıfından türemişlerdir ve beş farklı tetikleyici (trigger) vardır. Bunlar Trigger, MultiTrigger, DataTrigger, MultiDataTrigger, EventTrigger’dır.
Trigger
İstediğimiz event (olay) gerçekleştiğinde belirlediğimiz kontrollerin veya elementlerin property’lerini değiştirmemizi sağlar.
Basit bir örnekle açıklamaya çalışalım.
App.xaml dosyası içerisinde bulunan <Application.Resources> etiketleri arasına aşağıdaki kodları yazalım.
<Style TargetType="{x:Type Button}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True" /> <Setter Property="Background" Value="Red" /> </Trigger> </Style.Triggers> </Style>
Artık Window’a buton eklediğinizde fare ile buton üzerine geldiğinizde arkaplanı kırmızı olacaktır. Eeee nasıl oldu şimdi?
<Style TargetType=”{x:Type Button}”>
Burada TargetType ve x:Type Button tanımlarıyla stili tüm buton kontrollerine uygulayacağımızı belirttik.
<Style.Triggers>
Stil dosyasını etkileyecek olan bir trigger olacağını belirttik.
<Trigger Property=”IsMouseOver” Value=”True” />
Trigger eventleri property attribute ile yakalar bizde IsMouseOver yazarak trigger’ımıza fare üzerine gelince tetiklenmesini istedik.
<Setter Property=”Background” Value=”Red” />
Setter ile daha önce tanışmıştık. Stilimizin arkaplanı özelliğine “Background” ile ulaştık ve “Red” ile kırmızı değerini verdik.
MultiTrigger
Yukarıdaki örnekte tek bir koşulumuz vardı. Birden fazla koşul söz konusu olduğunda ise MultiTrigger’ları kullanırız. MultiTrigger’lar da her koşulu <Condition> etiketi ile açarız.
Aşağıda MultiTrigger’lar için verilen klişe örneklerden birini anlatmaya çalışacağım.
1- Aşağıda dört adet RadioButton oluşturuyoruz. Content özelliklerine dikkat lütfen.
<RadioButton Content="Beni seçme" HorizontalAlignment="Left" Margin="149,75,0,0" VerticalAlignment="Top" Width="171"/> <RadioButton Content="Beni de seçme" HorizontalAlignment="Left" Margin="149,96,0,0" VerticalAlignment="Top" Width="171"/> <RadioButton Content="Beni seç lütfen" HorizontalAlignment="Left" Margin="149,116,0,0" VerticalAlignment="Top" Width="171"/> <RadioButton Content="Aklından bile geçirme" HorizontalAlignment="Left" Margin="149,137,0,0" VerticalAlignment="Top" Width="171"/>
2- Ardından App.xaml dosyasının içerisine <Application.Resources> etiketleri arasına MultiTirgger’ımızı yazıyoruz.
<Style TargetType="{x:Type RadioButton}" > <Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsChecked" Value="True"></Condition> <Condition Property="Content" Value="Beni seç lütfen" ></Condition> </MultiTrigger.Conditions> <Setter Property="Foreground" Value="Green" /> <Setter Property="BorderBrush" Value="Red" /> </MultiTrigger> </Style.Triggers> </Style> </Application.Resources>
Seçimden Önce
Seçimden Sonra
Gördüğünüz gibi “Beni seç lütfen” yazan RadioButton seçildikten sonra yazı rengi yeşile ve düğme halkası kırmızıya dönüştü. Şimdi kodlarımızı inceleyelim.
<MultiTrigger>
Bir multi trigger uygulayacağımızı belirttik ve yer açtık.
<MultiTrigger.Conditions>
Burada multi triggerların koşullarını belirleyeceğimizi belirttik ve koşullar için tekrar yer açtık.
<Condition Property=”IsChecked” Value=”True”></Condition>
<Condition> ile multi trigger’ımızın şartını belirliyoruz. Property=”IsChecked” ile IsChecked event’ini baz alıyoruz yani buton seçilimi değil mi ve ardından Value=”True” ile IsChecked eventinin True olması gerektiğini yani seçilmesi gerektiğini ilk şart olarak belirliyoruz.
<Condition Property=”Content” Value=”Beni seç lütfen” ></Condition>
İkinci şartımızda ise Property=”Content” ile kontrolumuzun Content özelliğini baz alıyoruz ve Value=”Beni seç lütfen” yani Beni seç lütfen yazan butonun seçili olmasını ikinci şart koyuyoruz.
Şartlarımız bitti ve </MultiTrigger.Conditions> etiketi ile multi trigger alanını kapatıyoruz. Sıra geldi koşullar sağlanırsa nelerin yapılacağına.
<Setter Property=”Foreground” Value=”Green” />
<Setter Property=”BorderBrush” Value=”Red” />
Bu kodları daha önceki örneklerimizde anlattığım için fazla üzerinde durmaya gerek yok sanırım. Şartlar yerine gelirse yazı rengini yeşil ve buton halkasını kırmızı yapıyoruz.
Kolay gele.
Kaynak:http://www.ahmetcigsar.com/