Silverlight 3.0 için Trigger Action Behavior'ları geliştirmek.

0 dakikada yazıldı

9402 defa okundu

Düzenle

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

Örneğe ait kaynak kodlar - 23082009_2.rar (49,3
KB)