WPF 如何创建自定义tunelroutedevent?
-
19-09-2019 - |
题
我需要一个从父控件到子控件的隧道路由事件隧道的简单示例。
(这是 不是 真实代码)——事实上,我越深入,我就越认为 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
RoutingStrategy
的 Bubble
.
以下内容可能有助于理解隧道、气泡和直接:msdn.microsoft.com/en-us/library/system.windows.routingstrategy.aspx
这应该会带你走完剩下的路:msdn.microsoft.com/en-us/magazine/cc785480.aspx
一个提示:按照惯例,WPF 中的隧道事件以“Preview”开头(例如“PreviewExplode”。如果事件不以“预览”开始,则它可能不会使用隧道 RoutingStrategy。此外,您通常会看到隧道和气泡配对,隧道首先发射,然后气泡,如“PreviewExplode”然后是“Explode”。
如果您需要一个按钮的点击隧道,您可以考虑
- 使用 PreviewMouseDown (当然不一样,并且可能很危险,因为并非所有鼠标按下都意味着单击)。
- 编写一个引发 PreviewClick 和 Click 的 TunnelButton。
其他提示
原来这本书我有WPF在行动与Visual Studio 2008,第149页上,有一个似乎表明RoutedEvents可以在父节点被提出和路由事件隧道子节点一个非常误导的图。
这原来是并非如此... 1/2天吹出B / C坏图的(相当好的书另有)[ISBN:1-933988-22-3]
不隶属于 StackOverflow