2009-09-15 6 views
15

Ich lerne WPF/Silverlight und sah in einem MS vidcast, dass es jetzt empfohlen wird, RoutedEventArgs über zu verwenden; obwohl es nicht genau wies warum.RoutedEventArgs vs EventArgs

Ich habe eine Win App bildet, die Schnittstellen für die „Widgets“ in einem Versuch verwendet nicht auf eine bestimmte Display-Technologie gebunden zu sein (in Präsenter/Viewmodel), also wenn mein IButton Ereignis muss Klicken Sie nun die RoutedEventArgs jetzt nimmt mich denke, es ist nicht so nützlich.

Kann jemand bitte erklären, wenn ich RoutedEventArgs in allen Fällen wechseln sollte und warum?

Nebenbei, hat jemand andere Erfahrungen/Meinungen über die Verwendung von Interface-Widgets, wie ich sie beschreibe?

Antwort

32

Nun, im Grunde ein RoutedEvent bewegt sich durch die Logical Baum entweder von dem Element Quellenelement (Bubble Ereignisroute) oder, weniger oft von Stammelement zu Unterebenen Elemente zu verankern (Tunnel Ereignisroute). Was das bedeutet ist, dass, wenn Sie eine Button innerhalb einer StackPanel haben, die sich innerhalb eines Grid befindet; Wenn Sie ein Click Ereignis in den Steuerelementen definieren, werden sie alle ausgelöst, es sei denn, eines davon behandelt es.

Wenn das Ereignis Route Bubble (benannt als regelmäßige Veranstaltung Click) ist, wird es gehen:

Button -> StackPanel -> Grid

Wenn das Ereignis Route Tunnel wird (PreviewClick genannt), wird es in die andere Richtung gehen um :

Grid -> StackPanel -> Button

So, jetzt mit der Handhabung, es ist ziemlich einfach. Wenn es eine Bubble Route und die Button die RoutedEventArgs.Handled auf true setzt, dass StackPanel und Grid wird es nicht auslösen. Das gleiche mit der RoutedEvent, wenn die Grid es handhabt, werden die StackPanel und Button es nicht auslösen.

Dies ist mein Verständnis in kurzen Worten, ich habe einige Dinge aus Gründen der Einfachheit vermieden.

Ich empfehle this chapter für ein besseres Verständnis dieser Funktion WPF.

+2

Mein Kopf tut weh = ( – Coops

+1

@CodeBlend keine Schmerzen, kein Gewinn! – Carlo

+1

Einfache und kurze Erklärung. In welchem ​​Fall würden Sie einen Tunnel Ereignis verwenden müssen? Ich kann nicht von irgendwelchen praktischen Nutzen denken. –

1

RoutedEventArgs ist eine neue Art von Ereignisargument, das das WPF-Modell von Vielseitigkeits zu unterstützen besteht: Weitergeleitete Ereignisse. Es ist schwer in einem kurzen Beitrag zu erklären, warum genau WPF dieses Modell ausgewählt hat oder was der Punkt ist, also werde ich damit beginnen, auf einen guten Artikel zu diesem Thema zu verweisen.

0

Sagen wir ein Button-Element enthält, andere Elemente aufweisen, ein Stackpanel, selbst einen Text und ein Bildelement enthält.

Das Button Element sollte ganz gleich ein Click-Ereignis verarbeiten kann, wenn das Bild, das angeklickt wurde oder wenn die TextBox war.

Daher bietet WPF einen Weg:

  • Propagieren ein Ereignis durch Elementstruktur die meiste Zeit von dem Quellenelement sprudelnden (hier sagen dem Bild), auf eine höhere Ebene in Richtung Wurzelelement (zB der Knopf hier).
  • Behandeln Sie solch ein verbreitetes Ereignis.
Verwandte Themen