private static ControlNavigationHandler EnsureNavigationHandler(DependencyObject d) { ControlNavigationHandler handler = GetNavigationHandler(d); if (handler == null) { var handlers = MEFedContainer.Instance.Resolver.Container.GetExportedValues <ControlNavigationHandler>(); handler = handlers.FirstOrDefault(x => x.CanSupportControl(d)); if (handler == null) { throw new InvalidOperationException(d.GetType().FullName + " does not support the NavigateTo. Note: you can create your own by implementing a ControlNavigationHandler and exporting it as type ControlNavigationHandler"); } SetNavigationHandler(d, handler); // store the handler in the control itself } return(handler); }
private static void OnNavigateOnceLoadedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { string navigateTo = GetNavigateTo(d); if (GetNavigateOnceLoaded(d) && !String.IsNullOrEmpty(navigateTo)) { ControlNavigationHandler handler = GetNavigationHandler(d); if (handler == null) { return; } var element = (FrameworkElement)d; RoutedEventHandler elementOnLoaded = null; // fire this only once elementOnLoaded = delegate { handler.OnEventFired(navigateTo); element.Loaded -= elementOnLoaded; }; element.Loaded += elementOnLoaded; } }
/// <summary> /// Sets the NavigationHandler property. This dependency property /// indicates .... /// </summary> public static void SetNavigationHandler(DependencyObject d, ControlNavigationHandler value) { d.SetValue(NavigationHandlerProperty, value); }