private static void OnIsModalChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ModalContentPresenter control = (ModalContentPresenter)d; if ((bool)e.NewValue == true) { /* * Cache the keyboard navigation mode of the primary content before setting it to * 'none' so that it can be restored when the modal content is hidden. */ control.cachedTabNavigationMode = KeyboardNavigation.GetTabNavigation(control.primaryContentPresenter); control.cachedDirectionalNavigationMode = KeyboardNavigation.GetDirectionalNavigation(control.primaryContentPresenter); control.cachedFocusedElement = Keyboard.FocusedElement; KeyboardNavigation.SetTabNavigation(control.primaryContentPresenter, KeyboardNavigationMode.None); KeyboardNavigation.SetDirectionalNavigation(control.primaryContentPresenter, KeyboardNavigationMode.None); /* * Show the overlay (which in turn shows the modal content as it is a child of * the overlay) and move focus to the first logical element. */ control.overlay.Visibility = Visibility.Visible; control.overlay.MoveFocus(traversalDirection); control.RaiseModalContentShownEvents(); } else { /* * Hide the overlay (which also hides the modal content...). */ control.overlay.Visibility = Visibility.Hidden; /* * Restore the cached keyboard navigation value on the primary content and move * focus to its first logical element. */ KeyboardNavigation.SetTabNavigation(control.primaryContentPresenter, control.cachedTabNavigationMode); KeyboardNavigation.SetDirectionalNavigation(control.primaryContentPresenter, control.cachedDirectionalNavigationMode); Keyboard.Focus(control.cachedFocusedElement); control.primaryContentPresenter.MoveFocus(traversalDirection); control.RaiseModalContentHiddenEvents(); } }
private static void OnModalContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ModalContentPresenter control = (ModalContentPresenter)d; /* * If the ModalContentPresenter already contains modal content then * the existing content will need to be removed from the logical tree. */ if (e.OldValue != null) { control.RemoveLogicalChild(e.OldValue); } /* * Add the new content to the logical tree of the ModalContentPresenter * and update the logicalChildren array so that the correct element is returned * when it is requested by WPF. */ control.modalContentPresenter.Content = e.NewValue; control.AddLogicalChild(e.NewValue); control.logicalChildren[1] = e.NewValue; }
private static void OnOverlayBrushChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { ModalContentPresenter control = (ModalContentPresenter)d; control.overlay.Background = (Brush)e.NewValue; }