in src/BehaviorsSDKManaged/Microsoft.Xaml.Interactions/Core/EventTriggerBehavior.cs [135:176]
private void RegisterEvent(string eventName)
{
if (string.IsNullOrEmpty(eventName))
{
return;
}
if (eventName != "Loaded")
{
Type sourceObjectType = this._resolvedSource.GetType();
EventInfo info = sourceObjectType.GetRuntimeEvent(eventName);
if (info == null)
{
return;
}
MethodInfo methodInfo = typeof(EventTriggerBehavior).GetTypeInfo().GetDeclaredMethod("OnEvent");
this._eventHandler = methodInfo.CreateDelegate(info.EventHandlerType, this);
this._isWindowsRuntimeEvent = EventTriggerBehavior.IsWindowsRuntimeEvent(info);
if (this._isWindowsRuntimeEvent)
{
this._addEventHandlerMethod = add => (EventRegistrationToken)info.AddMethod.Invoke(this._resolvedSource, new object[] { add });
this._removeEventHandlerMethod = token => info.RemoveMethod.Invoke(this._resolvedSource, new object[] { token });
WindowsRuntimeMarshal.AddEventHandler(this._addEventHandlerMethod, this._removeEventHandlerMethod, this._eventHandler);
}
else
{
info.AddEventHandler(this._resolvedSource, this._eventHandler);
}
}
else if (!this._isLoadedEventRegistered)
{
FrameworkElement element = this._resolvedSource as FrameworkElement;
if (element != null && !EventTriggerBehavior.IsElementLoaded(element))
{
this._isLoadedEventRegistered = true;
element.Loaded += this.OnEvent;
}
}
}