Silverlight 3 için TriggerAction Behavior'ları yaratmak.

Yazar: Daron Yöndem
Kategori: Silverlight
Eklenme Tarihi: 2.11.2009 04:39:56



Silverlight 3 ile beraber gelen Behavior yapılarında kullanabildiğimiz TriggerAction tipindeki Behaviorların yaratılmasını inceliyoruz.

Blend içerisinde kullanılabilecek Behavior çeşitlerinden biri de Trigger'lı Behavior'lar. Bu tip Behavior'lara genelde Action da denebiliyor. Normal Behavior'lardan farklı olarak Trigger'lar da kendi içlerinde yaratılırken Inherit ettikleri sınıfa göre değişebilirler. Bu yazımızda TriggeredAction Behavior'larına göz atacağız.

Ne işe yarar?

TriggeredAction behaviorları sonuç itibari ile normal Behavior'lar gibi bir aksyon almayı hedefler fakat bu aksyon yine kullanıcı tarafından belirlenen bir durumu takiben işleme alınır. Normal şartlarda bir TriggeredAction kendi Parent kontrolünü hedef alarak onun herhangi bir event'ı çalıştığında çalışacak şekilde kenarda durur.

Örneğimizde basit bir MessageBox gösteren TriggerAction tanımlayacağız. Diyelim ki herhangi bir kontrole tıklandığında veya farklı durumlarda MessageBox'lar göstermek istiyoruz. Normalde yapmamız gereken kesinlikle kod tarafına geçip uygun kodu yazmak olurdu. Oysa hazırlayacağımız TriggerAction herhangi bir kod yazmadan tasarımcının istediği event ve zaman için istediği mesajı MessageBox ile gösterebilmesini sağlayacak.

Her zamanki gibi yeni bir Silverlight projesi yarattıkta sonra System.Windows.Interactivity.dll'i referans olarak alıyoruz. Projemize ekleyeceğimiz yeni bir VB/CS dosyasının içerisinde Behavior'ımızı tanımlayacak sınıfı yazarken TriggerAction sınıfnı da inherit ediyoruz.

[VB]

Public Class MsgBoxTrigger

    Inherits Interactivity.TriggerAction(Of UIElement)

 

    Protected Overrides Sub Invoke(ByVal parameter As Object)

 

    End Sub

End Class

[C#]

    public class MsgBoxTrigger : System.Windows.Interactivity.TriggerAction<UIElement>

    {

        protected override void Invoke(object parameter)

        {

        }

    }

Gördüğünüz üzere hemen anında Invoke adında bir de metoda sahip olduk. TriggerAction sınıfında Invoke "MustInherit" olarak tanımlandığı için söz konusu metodu bizim yazmamış şart. Zaten bu metod da bizim en çok işimize yarayacak metod olacak. Herhangi bir şekilde bizim Trigger'ımızda kullanıcı tarafından ayarlanmış event çalıştığında buradaki Invoke metodu çalışacak. Anlayacağınız TriggerAction'ımızın tüm işlevselliğini buraya yazacağız.

[VB]

    Private PText As String

    Public Property MessageText() As String

        Get

            Return PText

        End Get

        Set(ByVal value As String)

            PText = value

        End Set

    End Property

[C#]

        public string MessageText { get; set; }

Tasarımcımızdan aynı anda MessageBox ile gösterilecek metni de almamız gerek. O nedenle hemen bir de Property tanımlayarak sınıfımıza ekliyoruz. Bir sonraki adımda basit bir şekilde Invoke metodunda bu mesajı göstermemiz yeterli olacaktır.

[VB]

    Protected Overrides Sub Invoke(ByVal parameter As Object)

        MessageBox.Show(MessageText)

    End Sub

[C#]

        protected override void Invoke(object parameter)

        {

            MessageBox.Show(MessageText);

        }

Gördüğünüz gibi sistem epey basit. Her zamanki gibi isterseniz AssociatedObject'e de ulaşarak TriggerAction'ın bağlı olduğu kontrolü de bulabilirsiniz. Artık elimizdeki Behavior'ı rahatlıkla tasarımcılar da Blend içerisinde kullanarak istedikleri durumlarda MessageBox gösterebilirler.


Özel TriggerAction Behavior'ımız karşınızda.

XAML tarafına baktığımızda her zaman olduğu gibi tüm Trigger yapısı XML ile tanımlanmış durumda. Gerekli XML NameSpace'ler de eklendikten sonra hazırladığımız TriggerAction rahatlıkla kullanılabiliyor.

[XAML]

<UserControl

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

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

   xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

   mc:Ignorable="d" xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:local="clr-namespace:Triggers_VB" x:Class="Triggers_VB.MainPage"

   d:DesignWidth="640" d:DesignHeight="480">

  <Grid x:Name="LayoutRoot">

 

      <Rectangle Fill="Red" Stroke="Black" HorizontalAlignment="Left" Margin="157,184,0,215" Width="159">

          <i:Interaction.Triggers>

              <i:EventTrigger EventName="MouseLeftButtonDown">

                  <local:MsgBoxTrigger MessageText="Selamlar!"/>

              </i:EventTrigger>

          </i:Interaction.Triggers>

      </Rectangle>

 

  </Grid>

</UserControl>

Hepinize kolay gelsin.


Daron Yöndem

İstanbul Erkek Lisesi?nden 2003 yılında mezun oldu ve DEVELOAD Yazılım ve Tasarım (www.deveload.com) şirketini kurdu. Daron Yöndem şu an Portsmouth Üniversitesi'nde Strategic Business Information Technologies alanında yüksek lisans eğitimine devam ediyor. MCT, MCPD, MCITP, MCTS, MCSD, MCAD, MCDBA, MCP, ACP ve ICSD ünvanlarına sahip olan Daron Yöndem Türkiye'nin ilk Silverlight ve Expression Studio eğitimini Microsoft Türkiye organizasyonu ile verdi. Daron Yöndem'in Microsoft ASP.NET resmi sitesi, Microsoft Coding4fun, yazgelistir.com, PC World Türkiye ve PC Extra Türkiye'de çok sayıda makalesi yayınlanmıştır. En geniş Türkçe kaynak olma özelliği taşıyan Pusula Yayıncılık?tan çıkan ASP.NET AJAX kitabının yazarı Daron Yöndem halihazırda PCnet dergisinde AJAX, Expression Web, Expression Blend, Expression Design ve Silverlight yazıları yazmakta, nedirtv?com WPF/Silverlight ve VB.NET editörlüğü yapmaktadır. Kişisel bloğu http://daron.yondem.com adresi üzerinden İngilizce ve Türkçe makaleler
Bu makaleye ilk yorum yapan siz olun.

Yorumunuz