void HandleActivatable(ILaunchChooser <TResult> handler, object storedClientId) { var activatable = handler as IActivate; EventHandler <ActivationEventArgs> onActivate = null; onActivate = (s, e) => { if (!eventHandled && e.WasInitialized && string.Compare(storedClientId.ToString(), activator.GetKey(handler, string.Empty)) == 0) { handler.Handle(lastResult); lastResult = null; eventHandled = true; } if (activatable != null) { activatable.Activated -= onActivate; } }; if (activatable != null && !activatable.IsActive) { activatable.Activated += onActivate; } else { onActivate(null, new ActivationEventArgs { WasInitialized = true }); } }
void HandleView(object view, object storedClientId, ILaunchChooser <TResult> handler) { var frameworkElement = view as FrameworkElement; RoutedEventHandler onLoaded = null; onLoaded = (s, e) => { if (!eventHandled && string.Compare(storedClientId.ToString(), activator.GetKey(handler, string.Empty)) == 0) { handler.Handle(lastResult); lastResult = null; eventHandled = true; } frameworkElement.Loaded -= onLoaded; }; if (frameworkElement != null) { frameworkElement.Loaded += onLoaded; } else { onLoaded(null, null); } }
void HandleViewAware(ILaunchChooser <TResult> handler, IViewAware viewAware, object storedClientId) { EventHandler <ViewAttachedEventArgs> onViewAttached = null; onViewAttached = (s, e) => { HandleView(e.View, storedClientId, handler); viewAware.ViewAttached -= onViewAttached; }; viewAware.ViewAttached += onViewAttached; }
void TryHandleAtLatestTime(ILaunchChooser <TResult> handler, object storedClientId) { var viewAware = handler as IViewAware; if (viewAware != null) { var defaultView = viewAware.GetView(ViewLocator.DefaultContext); if (defaultView == null) { HandleViewAware(handler, viewAware, storedClientId); } else { HandleView(defaultView, storedClientId, handler); } } else { HandleActivatable(handler, storedClientId); } }