예제 #1
0
 /// <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;
 }
예제 #2
0
 /// <summary>
 /// Adds to existing handlers.
 /// </summary>
 /// <param name="index">The index.</param>
 /// <param name="handler">The handler.</param>
 /// <param name="handledEventsToo">if set to <c>true</c> [handled events too].</param>
 /// <returns>RoutedEventHandlerInfoList.</returns>
 internal RoutedEventHandlerInfoList AddToExistingHandlers(int index, Delegate handler, bool handledEventsToo)
 {
     var info = new RoutedEventHandlerInfo(handler, handledEventsToo);
     var handlers = this.eventHandlersList.List[index].Handlers;
     if ((handlers == null) || !this.eventHandlersList.List[index].HasSelfHandlers)
     {
         handlers = new RoutedEventHandlerInfoList();
         handlers.Handlers = new RoutedEventHandlerInfo[] { info };
         handlers.Next = this.eventHandlersList.List[index].Handlers;
         this.eventHandlersList.List[index].Handlers = handlers;
         this.eventHandlersList.List[index].HasSelfHandlers = true;
         return handlers;
     }
     var length = handlers.Handlers.Length;
     var destinationArray = new RoutedEventHandlerInfo[length + 1];
     Array.Copy(handlers.Handlers, 0, destinationArray, 0, length);
     destinationArray[length] = info;
     handlers.Handlers = destinationArray;
     return handlers;
 }
예제 #3
0
 /// <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;
             }
         }
     }
 }