/// <summary> /// Creates the handlers link. /// </summary> /// <param name="routedEvent">The routed event.</param> /// <param name="handlers">The handlers.</param> /// <returns>System.Int32.</returns> internal int CreateHandlersLink(RoutedEvent routedEvent, RoutedEventHandlerInfoList handlers) { var item = new ClassHandlers(); item.RoutedEvent = routedEvent; item.Handlers = handlers; item.HasSelfHandlers = false; this.eventHandlersList.Add(item); return this.eventHandlersList.Count - 1; }
/// <summary> /// Gets the index of the handlers. /// </summary> /// <param name="routedEvent">The routed event.</param> /// <returns>System.Int32.</returns> internal int GetHandlersIndex(RoutedEvent routedEvent) { for (var i = 0; i < this.eventHandlersList.Count; i++) { if (this.eventHandlersList.List[i].RoutedEvent == routedEvent) { return i; } } return -1; }
/// <summary> /// Updates the sub class handlers. /// </summary> /// <param name="routedEvent">The routed event.</param> /// <param name="baseClassListeners">The base class listeners.</param> internal void UpdateSubClassHandlers(RoutedEvent routedEvent, RoutedEventHandlerInfoList baseClassListeners) { var handlersIndex = this.GetHandlersIndex(routedEvent); if (handlersIndex != -1) { var hasSelfHandlers = this.eventHandlersList.List[handlersIndex].HasSelfHandlers; var handlers = hasSelfHandlers ? this.eventHandlersList.List[handlersIndex].Handlers.Next : this.eventHandlersList.List[handlersIndex].Handlers; var flag = false; if (handlers != null) { if ((baseClassListeners.Next != null) && baseClassListeners.Next.Contains(handlers)) { flag = true; } } else { flag = true; } if (flag) { if (hasSelfHandlers) { this.eventHandlersList.List[handlersIndex].Handlers.Next = baseClassListeners; } else { this.eventHandlersList.List[handlersIndex].Handlers = baseClassListeners; } } } }