Represents a trigger that can listen to an object other than its AssociatedObject.
This is an infrastructure class. Trigger authors should derive from EventTriggerBase<T> instead of this class.
Inheritance: TriggerBase
        /// <exception cref="T:System.ArgumentException">Could not find eventName on the Target.</exception>
        private void RegisterEvent(object obj, string eventName)
        {
            EventInfo @event = obj.GetType().GetRuntimeEvent(eventName);

            if (@event == null)
            {
                if (this.SourceObject == null)
                {
                    return;
                }
                throw new ArgumentException("EventTrigger cannot find EventName");
            }
            else if (!EventTriggerBase.IsValidEvent(@event))
            {
                if (this.SourceObject == null)
                {
                    return;
                }
                throw new ArgumentException("EventTriggerBase invalid event");
            }
            else
            {
                this.eventHandlerMethodInfo = typeof(EventTriggerBase).GetTypeInfo().GetDeclaredMethod("OnEventImpl");
                Delegate handler = this.eventHandlerMethodInfo.CreateDelegate(@event.EventHandlerType, this);

                WindowsRuntimeMarshal.AddEventHandler <Delegate>(
                    dlg => (EventRegistrationToken)@event.AddMethod.Invoke(obj, new object[] { dlg }),
                    etr => @event.RemoveMethod.Invoke(obj, new object[] { etr }), handler);
            }
        }
        private static void OnSourceObjectChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
        {
            EventTriggerBase eventTriggerBase = (EventTriggerBase)obj;
            object           newSource        = (object)eventTriggerBase.SourceNameResolver.Object;

            if (args.NewValue == null)
            {
                eventTriggerBase.OnSourceChanged(args.OldValue, newSource);
            }
            else
            {
                if (args.OldValue == null && newSource != null)
                {
                    eventTriggerBase.UnregisterEvent(newSource, eventTriggerBase.GetEventName());
                }
                eventTriggerBase.OnSourceChanged(args.OldValue, args.NewValue);
            }
        }