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

(这是 不是 真实代码)——事实上,我越深入,我就越认为 XAML 是错误的——可能不应该在子节点上的 XAML 中注册隧道事件(不确定?)

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

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

谢谢,艾伦

有帮助吗?

解决方案

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

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

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

请注意 readonly RoutingStrategyBubble.

以下内容可能有助于理解隧道、气泡和直接:msdn.microsoft.com/en-us/library/system.windows.routingstrategy.aspx

这应该会带你走完剩下的路:msdn.microsoft.com/en-us/magazine/cc785480.aspx

一个提示:按照惯例,WPF 中的隧道事件以“Preview”开头(例如“PreviewExplode”。如果事件不以“预览”开始,则它可能不会使用隧道 RoutingStrategy。此外,您通常会看到隧道和气泡配对,隧道首先发射,然后气泡,如“PreviewExplode”然后是“Explode”。

如果您需要一个按钮的点击隧道,您可以考虑

  1. 使用 PreviewMouseDown (当然不一样,并且可能很危险,因为并非所有鼠标按下都意味着单击)。
  2. 编写一个引发 PreviewClick 和 Click 的 TunnelButton。

其他提示

原来这本书我有WPF在行动与Visual Studio 2008,第149页上,有一个似乎表明RoutedEvents可以在父节点被提出和路由事件隧道子节点一个非常误导的图。

这原来是并非如此... 1/2天吹出B / C坏图的(相当好的书另有)[ISBN:1-933988-22-3]

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top