Esempio n. 1
0
        /// <inheritdoc/>
        protected override void OnAttached()
        {
            if (EventName == null)
            {
                throw new ArgumentException($"The EventName property must be set on behavior '{GetType().FullName}'.");
            }

            var eventOwnerType = EventOwnerType ?? AssociatedObject.GetType();

            var uiElement = AssociatedObject as UIElement;

            var routedEvents = EventManager.GetRoutedEvents().Where(x => x.Name == EventName && x.OwnerType.IsAssignableFrom(eventOwnerType)).ToArray();

            if (uiElement != null && routedEvents.Length > 0)
            {
                if (routedEvents.Length > 1)
                {
                    throw new NotImplementedException("TODO: several events found, find a way to decide the most relevant one.");
                }

                routedEvent = routedEvents.First();
                uiElement.AddHandler(routedEvent, routedEventHandler);
            }
            else
            {
                var eventInfo = AssociatedObject.GetType().GetEvent(EventName);

                if (eventInfo == null)
                {
                    throw new InvalidOperationException($"Impossible to find a valid event named '{EventName}'.");
                }

                eventHandler = AnonymousEventHandler.RegisterEventHandler(eventInfo, AssociatedObject, OnEvent);
            }
        }
Esempio n. 2
0
 /// <inheritdoc/>
 protected override void OnDetaching()
 {
     if (routedEvent != null)
     {
         AssociatedObject.RemoveHandler(routedEvent, routedEventHandler);
         routedEvent = null;
     }
     else if (eventHandler != null)
     {
         AnonymousEventHandler.UnregisterEventHandler(eventHandler);
         eventHandler = null;
     }
 }