2009-08-20 13 views
1

J'ai besoin d'un exemple simple d'un tunnel Tuning Routed Event d'un contrôle parent à un contrôle enfant.WPF Comment créer un tunnel CUSTOM routedevent?

(CECI EST PAS CODE REAL) - en fait, plus je vais, plus je pense que le XAML est faux - ne devrait probablement pas vous inscrire à l'événement tunnelled en XAML sur le nœud enfant (pas sûr?)

<PARENT>  
    <MyControl DoSomethingOnUserAction="raiseTunnelEvent"> HELP </MyControl >  
    <CHILD> I SHOULD HANDLE tunnelled event </CHILD> 
</PARENT> 

Un exemple simple et concis serait utile.

Merci, Alan

Répondre

3

ne suis pas sûr, mais vous pouvez vouloir un chat à aboyer.

Le RoutedEvent ClickEvent Button (de PresentationFramework) est déclarée comme:

public static readonly RoutedEvent ClickEvent = 
    EventManager.RegisterRoutedEvent("Click", 
    RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof 
    (ButtonBase)); 

Notez le readonlyRoutingStrategy de Bubble.

Ce qui suit peut aider à comprendre Tunnel, Bubble et direct: msdn.microsoft.com/en-us/library/system.windows.routingstrategy.aspx

Et cela, vous devez prendre le reste de la chemin: msdn.microsoft.com/en-us/magazine/cc785480.aspx

Un conseil: par convention les événements de tunnel dans WPF commencent par "Aperçu" (par exemple "PreviewExplode".) Si l'événement ne commence pas avec "Aperçu", il n'utilise probablement pas le tunnel RoutingStrategy.Vous verrez également un Tunnel et une Bulle couplés avec le Tunnel tirant d'abord puis la Bulle comme dans "PreviewExplode" suivi de "Explode"

Si vous avez besoin vous pourriez envisager

  1. tunnel Click un bouton, en utilisant PreviewMouseDown (pas le même bien sûr et dangereux probable puisque tous-bas de la souris sont destinés à devenir des clics).
  2. Ecriture d'un TunnelButton qui déclenche un PreviewClick puis un Click.
+0

Je pense que je tort croyait qu'un RoutingStrategy.Tunnel pouvait communiquer des événements aux enfants du nœud source (par exemple, un contrôle parent pouvait déclencher un événement qui «passerait» à un enfant). Après avoir relu la documentation que vous mettez ici, tous les événements routés semblent commencer (bulle) ou terminer (tunnel) ou les deux (direct) au niveau du noeud source. Donc dans ce cas, mon exemple ne fonctionnera pas avec WPF RoutedEvents. Un chat aboyant ... – Sumtraveller

+0

Aussi n'a pas aidé que j'ai utilisé BOUTON dans le cadre de mon exemple (qui seulement distrait de la vraie question) - ouais, j'ai vu l'exemple PreviewMouseDown ... j'espérais PARENT (où l'événement se produit) - [tunnel] -> ToChild – Sumtraveller

2

Active le livre que j'ai WPF en action avec Visual Studio 2008, à la page 149, a un diagramme très trompeur qui semble indiquer que RoutedEvents peuvent être élevés dans un nœud parent et événement routé tunnellisés aux nœuds enfants .

qui se révèle ne pas être le cas ... 1/2 jour soufflés b/c du mauvais diagramme (assez bon livre autrement) [ISBN: 1-933988-22-3]