示例#1
0
        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;
        }
示例#2
0
        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;
        }
示例#3
0
        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();
        }
示例#4
0
 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;
 }
示例#5
0
 public static void CancelRestoreFocus()
 {
     _restoreFocusScope = null;
 }