private static void InvokeEventHandlers(UIElement source, RoutedEventArgs args) { args.Source = source; foreach (var handler in GlobalEventManager.GetTypedClassEventHandlers(source.GetType(), args.RoutedEvent)) { handler.InvokeHandler(source, args); } List<RoutedEventHandlerInfo> handlers; if (source._eventHandlerDictionary.TryGetValue(args.RoutedEvent, out handlers)) { foreach (var handler in handlers) { handler.InvokeHandler(source, args); } } }
private static void RaiseEventImpl(UIElement sender, RoutedEventArgs args) { args.Source = sender; Visual visual; switch (args.RoutedEvent.RoutingStrategy) { case RoutingStrategy.Direct: InvokeEventHandlers(sender, args); break; case RoutingStrategy.Bubble: visual = sender; while (visual != null) { var uiElement = visual as UIElement; if (uiElement != null) InvokeEventHandlers(uiElement, args); visual = visual.VisualParent; } break; case RoutingStrategy.Tunnel: var stack = new List<UIElement>(); visual = sender; while (visual != null) { var uiElement = visual as UIElement; if (uiElement != null) stack.Add(uiElement); visual = visual.VisualParent; } for (int n = stack.Count - 1; n >= 0; --n) { InvokeEventHandlers(stack[n], args); } break; } }
public void RaiseEvent(RoutedEventArgs args) { if (args == null) throw new ArgumentNullException("args"); RaiseEventImpl(this, args); }
protected static void ReRaiseEventAs(UIElement sender, RoutedEventArgs args, RoutedEvent newEvent) { if(sender == null) return; if (args == null) throw new ArgumentNullException("args"); if (newEvent == null) throw new ArgumentNullException("newEvent"); var oldEvent = args.RoutedEvent; try { args.RoutedEvent = newEvent; RaiseEventImpl(sender, args); } finally { args.RoutedEvent = oldEvent; } }
internal void InvokeHandler(object target, RoutedEventArgs routedEventArgs) { if (routedEventArgs.Handled && !HandledEventsToo) return; if (CommandStencilHandler != null) { CommandStencilHandler.Execute(new Object[] { target, routedEventArgs }); } else { var handler = Handler as RoutedEventHandler; if (handler != null) { handler(target, routedEventArgs); } else { Handler.DynamicInvoke(target, routedEventArgs); } } }