WPF如何创建CUSTOM tunel routedevent?

时间:2009-08-20 18:29:08

标签: wpf routedevent

我需要一个从父控件到子控件的隧道路由事件隧道的简单示例。

(这是 NOT REAL CODE) - 事实上,我越深入,我越认为XAML是错误的 - 可能不应该注册XAML中的隧道事件子节点(不确定?)

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

简单,简洁的例子会很有帮助。

谢谢, 艾伦

2 个答案:

答案 0 :(得分:3)

不确定,但你可能想要一只猫吠。

Button的RoutedEvent ClickEvent(来自PresentationFramework)声明为:

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

请注意readonly的{​​{1}} RoutingStrategy

以下内容可能有助于理解Tunnel,Bubble和Direct: msdn.microsoft.com/en-us/library/system.windows.routingstrategy.aspx

这应该会让你完全接受: msdn.microsoft.com/en-us/magazine/cc785480.aspx

提示:按照惯例,WPF中的隧道事件以“预览”开头(例如 - “PreviewExplode”。如果事件不以“预览”开头,它可能不会使用隧道RoutingStrategy。您通常也会看到隧道和泡泡与隧道一起射击然后是“预览爆炸”,然后是“爆炸”,然后是“爆炸”。

如果你需要一个Button的Click隧道,你可以考虑

  1. 使用PreviewMouseDown(当然不一样,而且可能很危险,因为并非所有鼠标都会变成点击)。
  2. 编写一个提升PreviewClick然后点击的TunnelButton。

答案 1 :(得分:2)

事实证明,我使用Visual Studio 2008进行WPF操作,第149页,有一个非常具有误导性的图表,似乎表明可以在父节点中引发RoutedEvents,并将该路由事件隧道传输到子节点。

事实证明并非如此......糟糕图表的半天吹b / c(否则相当不错的书)[ISBN:1-933988-22-3]