c# - What's the difference between a class listener and an instance listner in WPF? -


i trying wrap head around wpf specific stuff, , have yet find concrete relation between uielement.addhandler method , eventmanager.registerclasshandler method.

i have googled bit , found interesting msdn article:

http://msdn.microsoft.com/en-us/library/ms747183.aspx

here states:

"routed events consider 2 different types of listeners event: class listeners , instance listeners. class listeners exist because types have called particular eventmanager api, registerclasshandler, in static constructor, or have overridden class handler virtual method element base class. instance listeners particular class instances/elements 1 or more handlers have been attached routed event call addhandler."

alright know difference between class , instance, somehow cannot make sense out of specific part of document.

can clear me?

i don't know, want know. things pretty simple: can register handler @ instance (object) level, or @ class level.

the difference is, when register event @ class level, called first, before instance level handlers (of course tunneling or bubbling still takes place before, if handling class lower/higher in logical tree). can handle event @ class level , filter whether event should handled instance or not (by setting e.handled = true stop event going through other handlers). may useful in cases, have no example in mind share.

this sample register event handler called when event raised specific instance of element:

dockpanel panel = new dockpanel(); panel.addhandler(button.clickevent, new routedeventhandler(button_click)); 

and create event handler, called each time dockpanel button.click event, before instance handler of dockpanel called:

eventmanager.registerclasshandler(typeof(dockpanel),     button.clickevent, new routedeventhandler(buttonclass_click)); 

if methods were:

private void buttonclass_click(object sender, routedeventargs e) {     debug.write("class level handler"); }  private void button_click(object sender, routedeventargs e) {     debug.write("instance level handler"); } 

this create output:

class level handler
instance level handler

but if in class level handler set event args handeled (e.handled = true;), filter out event instance level handler (and bubbling in logical tree).


Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -