/// <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); } }