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

时间:2011-04-24 08:06:41

标签: c# .net wpf silverlight xaml

在WPF或Silverlight中是否可以拥有与GUI类无关的标准类的自定义层次结构,并为此层次结构设置冒泡和事件调整?怎么样?

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

2 个答案:

答案 0 :(得分:2)

路由事件要求对象继承自UIElement类,这几乎要求它成为GUI控件。

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

答案 1 :(得分:1)

除非您创建类似于EventManager类为您提供的功能,否则无法使用.net框架。 假设你开始实施了。然后你必须遍历&下一个对象图(如果您的类层次结构不是树)。为此你需要确定哪些对象实际上是树的一部分,哪些不是 假设您有以下内容:

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的工作原因是你有一个在树中的UIElements,而不是像上面场景中的图形。但是任意阶级层次结构都是图形而不是树。 因此,如果你开始实现类似的东西,它只适用于类似于以下的树类。

class Node 
{
   Node parent;
   //other members
}

然后你会知道如何使用“父”属性始终冒泡。

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