Como identificar um evento roteado
Este exemplo mostra como os eventos de propagação funcionam e como escrever um manipulador que pode processar os dados de eventos roteados.
Exemplo
No Windows Presentation Foundation (WPF), os elementos são organizados em uma estrutura de árvore de elementos. O elemento pai pode participar da manipulação de eventos que são inicialmente gerados por elementos filho na árvore de elementos. Isso é possibilitado pelo roteamento de eventos.
Eventos roteados geralmente seguem uma das duas estratégias de roteamento, propagação ou túnel. Este exemplo se concentra no evento borbulhante e usa o evento para mostrar como o ButtonBase.Click roteamento funciona.
O exemplo a seguir cria dois Button controles e usa a sintaxe de atributo XAML para anexar um manipulador de eventos a um elemento pai comum, que neste exemplo é StackPanel. Em vez de anexar manipuladores de eventos individuais para cada Button elemento filho, o exemplo usa a sintaxe de atributo para anexar o manipulador de eventos ao StackPanel elemento pai. Esse padrão de manipulação de eventos mostra como usar o roteamento de eventos como uma técnica para reduzir o número de elementos aos quais um manipulador está anexado. Todos os eventos borbulhantes para cada Button rota através do elemento pai.
Observe que no elemento pai StackPanel , o nome do Click evento especificado como o atributo é parcialmente qualificado nomeando a Button classe. A Button classe é uma ButtonBase classe derivada que tem o Click evento em sua listagem de membros. Essa técnica parcial de qualificação para anexar um manipulador de eventos será necessária se o evento que está sendo manipulado não existir nos membros de listagem do elemento ao qual o manipulador de eventos roteados está conectado.
<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>
O exemplo a seguir manipula o Click evento. O exemplo informa qual elemento manipula o evento e qual elemento gera o evento. O manipulador de eventos é executado quando o usuário clica em um dos botões.
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
Confira também
.NET Desktop feedback