private static void OnPreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs args) { if (!IsCurrentThreadMainUiThread()) { return; } if (!(sender is DependencyObject element) || !IsRegisteredCommandFocusElement(element) || _restoreFocusScope == null || !IsCommandContainerLosingFocus(args.OldFocus, args.NewFocus) || args.NewFocus == null) { return; } var restoreFocusScope = _restoreFocusScope; _restoreFocusScope = null; if (IsAttachedCommandFocusElement(element)) { return; } if (((FrameworkElement)sender).FindAncestor <AnchorableToolBarTray>() == null) { restoreFocusScope.PerformRestoration(); } args.Handled = true; }
private static void OnPreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs args) { if (!IsCurrentThreadMainUiThread()) { return; } if (!(sender is DependencyObject dependencyObject) || !IsRegisteredCommandFocusElement(dependencyObject)) { return; } if (_restoreFocusScope == null && IsCommandContainerGainingFocus(args.OldFocus, args.NewFocus)) { if (!IsAttachedCommandFocusElement(dependencyObject)) { CurrentMenuModeSource = PresentationSource.FromDependencyObject(dependencyObject); } _restoreFocusScope = new CommandRestoreFocusScope(args.OldFocus); } if (PresentationSource.FromDependencyObject(dependencyObject) != null) { return; } args.Handled = true; }
private static void OnContextMenuClosed(object sender, RoutedEventArgs e) { if (!IsCurrentThreadMainUiThread() || _restoreFocusScope == null || !IsCommandContainerLosingFocus(e.Source as IInputElement, Keyboard.FocusedElement)) { return; } CurrentMenuModeSource = null; var restoreFocusScope = _restoreFocusScope; _restoreFocusScope = null; restoreFocusScope.PerformRestoration(); }
private void HandleRestoreFocusCore() { _isPendingRestoreFocus = false; if (ShouldRestoreFocus()) { if (RestoreFocusScope != null) { RestoreFocusScope.PerformRestoration(); } else { Keyboard.Focus(null); } } if (ShouldSynchronizeActivation()) { // WindowManagerService.Instance.ActivateFrameFromSource(this.Source); } _cancelRestoreFocus = false; }
public static void CancelRestoreFocus() { _restoreFocusScope = null; }