Share via


Nasıl yapılır: Gönderilmiş bir Olayı İşleme

Bu örnekte, kabarcık oluşturma olaylarının nasıl çalıştığı ve yönlendirilen olay verilerini işleyebilen bir işleyicinin nasıl yazıldığı gösterilmektedir.

Örnek

Windows Presentation Foundation'da (WPF), öğeler bir öğe ağacı yapısında düzenlenir. Üst öğe, başlangıçta öğe ağacındaki alt öğeler tarafından tetiklenen olayların işlenmesine katılabilir. Bu, olay yönlendirmesi nedeniyle mümkündür.

Yönlendirilen olaylar genellikle iki yönlendirme stratejisinden birini izler: kabarcık oluşturma veya tünel oluşturma. Bu örnek, kabarcık olayına odaklanır ve yönlendirmenin ButtonBase.Click nasıl çalıştığını göstermek için olayı kullanır.

Aşağıdaki örnek iki Button denetim oluşturur ve ortak bir üst öğeye olay işleyicisi eklemek için XAML özniteliği söz dizimini kullanır. Bu örnekte şöyledir StackPanel: . Örnek, her Button alt öğe için tek tek olay işleyicileri eklemek yerine, olay işleyicisini üst öğeye eklemek için öznitelik söz dizimini StackPanel kullanır. Bu olay işleme düzeni, bir işleyicinin eklendiği öğe sayısını azaltmak için bir teknik olarak olay yönlendirmenin nasıl kullanılacağını gösterir. Üst öğe aracılığıyla her Button yol için tüm kabarcık olayları.

Üst StackPanel öğede, Click özniteliği olarak belirtilen olay adının sınıfı adlandırılarak kısmen nitelendiğini Button unutmayın. Button sınıfı, olayı üyeleri listesinde içeren Click türetilmiş bir ButtonBase sınıftır. İşlenen olay, yönlendirilen olay işleyicisinin eklendiği öğenin üye listesinde yoksa, olay işleyicisi eklemeye yönelik bu kısmi niteleme tekniği gereklidir.

<StackPanel
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="SDKSample.RoutedEventHandle"
  Name="dpanel"
  Button.Click="HandleClick"
>
  <StackPanel.Resources>
      <Style TargetType="{x:Type Button}">
        <Setter Property="Height" Value="20"/>
        <Setter Property="Width" Value="250"/>
        <Setter Property="HorizontalAlignment" Value="Left"/>
      </Style>
  </StackPanel.Resources>
  <Button Name="Button1">Item 1</Button>
  <Button Name="Button2">Item 2</Button>
  <TextBlock Name="results"/>
</StackPanel>

Aşağıdaki örnek olayı işler Click . Örnek, olayı işleyen öğeyi ve olayı tetikleyen öğeyi bildirir. Olay işleyicisi, kullanıcı herhangi bir düğmeye tıkladığında yürütülür.

public partial class RoutedEventHandle : StackPanel
{
    StringBuilder eventstr = new StringBuilder();
    void HandleClick(object sender, RoutedEventArgs args)
    {
        // Get the element that handled the event.
        FrameworkElement fe = (FrameworkElement)sender;
        eventstr.Append("Event handled by element named ");
        eventstr.Append(fe.Name);
        eventstr.Append("\n");

        // Get the element that raised the event.
        FrameworkElement fe2 = (FrameworkElement)args.Source;
        eventstr.Append("Event originated from source element of type ");
        eventstr.Append(args.Source.GetType().ToString());
        eventstr.Append(" with Name ");
        eventstr.Append(fe2.Name);
        eventstr.Append("\n");

        // Get the routing strategy.
        eventstr.Append("Event used routing strategy ");
        eventstr.Append(args.RoutedEvent.RoutingStrategy);
        eventstr.Append("\n");

        results.Text = eventstr.ToString();
    }
}
Private eventstr As New Text.StringBuilder()

Private Sub HandleClick(ByVal sender As Object, ByVal args As RoutedEventArgs)
    ' Get the element that handled the event.
    Dim fe As FrameworkElement = DirectCast(sender, FrameworkElement)
    eventstr.Append("Event handled by element named ")
    eventstr.Append(fe.Name)
    eventstr.Append(vbLf)

    ' Get the element that raised the event. 
    Dim fe2 As FrameworkElement = DirectCast(args.Source, FrameworkElement)
    eventstr.Append("Event originated from source element of type ")
    eventstr.Append(args.Source.[GetType]().ToString())
    eventstr.Append(" with Name ")
    eventstr.Append(fe2.Name)
    eventstr.Append(vbLf)

    ' Get the routing strategy.
    eventstr.Append("Event used routing strategy ")
    eventstr.Append(args.RoutedEvent.RoutingStrategy)
    eventstr.Append(vbLf)

    results.Text = eventstr.ToString()
End Sub

Ayrıca bkz.