Можно ли настроить Event Bubbling и Event Tunelling для стандартного класса, а не только для классов XAML? - PullRequest
1 голос
/ 24 апреля 2011

В WPF или Silverlight Возможно ли иметь собственную иерархию стандартных классов, не связанных с классами графического интерфейса пользователя, и настраивать Bubbling и Event Tunelling для этой иерархии?Как?

при просмотре событий я не вижу ничего действительно связанного с пузырями или туннелированием http://msdn.microsoft.com/en-us/library/system.windows.uielement_events.aspx

Ответы [ 2 ]

2 голосов
/ 24 апреля 2011

Для перенаправленных событий требуется, чтобы объект наследовал от UIElement класса, который в значительной степени определяет его как элемент управления с графическим интерфейсом.

Все такие классы могут быть созданы из кода позади (C # / VB / ...). XAML просто предоставляет удобный способ декларативного определения объектов, он не делает ничего, что нельзя сделать из кода позади.

1 голос
/ 25 апреля 2011

Невозможно использовать .net Framework, если вы не создадите что-то похожее на функциональность, предоставляемую классом 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 вызывает всплывающее событие. Для какого родителя это должно пузыриться? а1 или а2? Пузырьки и туннелирование в WPF и Silverlight работают, потому что у вас есть элементы UIE, которые находятся в дереве, а не в графике, как в сценарии выше. Но произвольные классовые иерархии - это графы, а не деревья. Поэтому, если вы начнете реализовывать нечто подобное, это будет работать только для класса дерева, подобного следующему.

class Node 
{
   Node parent;
   //other members
}

Тогда вы бы знали, как всегда всплывать, используя свойство "parent".

Но прежде чем приступить к реализации EventManager, я бы посоветовал вам еще раз взглянуть на то, что такое RoutedEvents и каковы сценарии их использования: http://msdn.microsoft.com/en-us/library/ms742806.aspx Также, возможно, вы могли бы предоставить нам сценарии, в которых перенаправленные события были бы полезны для иерархии (дерева) стандартного (не-пользовательского) класса, чтобы посмотреть, сможем ли мы найти альтернативу RoutedEvents.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...