是否有可能为标准类而不仅仅是XAML类设置事件冒泡和事件隧道?

本文关键字:事件 隧道 设置 XAML 有可能 标准 不仅仅是 是否 | 更新日期: 2023-09-27 17:52:54

在WPF或Silverlight中,是否有可能拥有与GUI类无关的标准类的自定义层次结构,并为该层次结构设置排气气泡和事件隧道?如何?

在观察事件时,我没有看到任何与冒泡或隧道有关的东西http://msdn.microsoft.com/en-us/library/system.windows.uielement_events.aspx

是否有可能为标准类而不仅仅是XAML类设置事件冒泡和事件隧道?

路由事件要求对象继承自UIElement类,这几乎注定了它是一个GUI控件。

所有这些类都可以从后台代码(c#/VB/…)实例化。XAML只是提供了一种方便的方式来声明性地定义对象,它不做任何不能从后台代码完成的事情。

使用。net框架是不可能的,除非你创建类似EventManager类提供给你的功能。假设您开始实现。然后你就得往上走;沿着一个对象图(如果您的类层次结构不是树状的)。为此,您需要以某种方式识别哪些对象实际上是树的一部分,哪些不是。
假设您有以下内容:

class A
{
   public B b;
}
class B
{
}

B b1 = new B();
A a1 = new A() { b = b1 };
A a2 = new A() { b = b1 };

假设b1引发冒泡事件。它应该向哪一位家长冒泡?A1还是a2?冒泡,WPF隧道掘进;Silverlight之所以有效是因为你拥有树状的ui元素,而不是像上面那样的图形。但是任意的类层次结构是图形而不是树。因此,如果你要开始实现类似的东西,它将只适用于类似于下面的树类。

class Node 
{
   Node parent;
   //other members
}

那么你就知道如何总是使用"parent"属性冒泡。

但是,在你开始实现你的EventManager之前,我建议你再看一下RoutedEvents是什么以及使用它们的场景:http://msdn.microsoft.com/en-us/library/ms742806.aspx也许你可以为我们提供一些场景,其中路由事件对于标准(非ui)类层次结构(树)很有用,看看我们是否可以找到RoutedEvents的替代方案。