Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przykładzie pokazano, jak działają zdarzenia bubbling i jak napisać procedurę obsługi, która może przetwarzać kierowane dane zdarzenia.
Przykład
W programie Windows Presentation Foundation (WPF) elementy są rozmieszczone w strukturze drzewa elementów. Element nadrzędny może uczestniczyć w obsłudze zdarzeń, które są początkowo wywoływane przez elementy podrzędne w drzewie elementów. Jest to możliwe z powodu routingu zdarzeń.
Zdarzenia kierowane zwykle stosują jedną z dwóch strategii routingu: bubbling lub tunneling. W tym przykładzie skupiono się na zdarzeniu bubbling i użyto zdarzenia ButtonBase.Click, aby pokazać, jak działa routing.
Poniższy przykład tworzy dwie kontrolki Button i używa składni atrybutów XAML do dołączenia procedury obsługi zdarzeń do wspólnego elementu nadrzędnego, który w tym przykładzie jest StackPanel. Zamiast dołączać poszczególne programy obsługi zdarzeń dla każdego elementu podrzędnego Button, w przykładzie użyto składni atrybutów w celu dołączenia programu obsługi zdarzeń do elementu nadrzędnego StackPanel. Ten schemat obsługi zdarzeń pokazuje, jak używać routingu zdarzeń jako techniki zmniejszania liczby elementów, do których przypisany jest program obsługi. Wszystkie zdarzenia bubbling dla każdego Button kierować przez element nadrzędny.
Należy pamiętać, że w elemecie nadrzędnym StackPanel nazwa zdarzenia Click określona jako atrybut jest częściowo kwalifikowana przez nazewnictwo klasy Button. Klasa Button jest klasą pochodną ButtonBase, która ma zdarzenie Click w składzie swoich członków. Ta częściowa technika kwalifikacji do dołączania programu obsługi zdarzeń jest niezbędna, jeśli obsługiwane zdarzenie nie istnieje na liście elementów członkowskich, w których jest dołączony program obsługi zdarzeń kierowanych.
<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>
Poniższy przykład obsługuje zdarzenie Click. Przykład raportuje, który element obsługuje zdarzenie i który element zgłasza zdarzenie. Procedura obsługi zdarzeń jest wykonywana, gdy użytkownik kliknie dowolny przycisk.
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
Zobacz też
- RoutedEvent
- Omówienie danych wejściowych
- Przegląd Zdarzeń Kierowanych
- Tematy poradników
- Szczegółowa składnia XAML
.NET Desktop feedback