Exemplo n.º 1
0
        internal void CoreSetResults(FocusMovementResult coreFocusMovementResult)
        {
            if (_focusMovementResult == null)
            {
                _focusMovementResult = new FocusMovementResult();
            }

            bool wasMoved = coreFocusMovementResult.WasMoved && !coreFocusMovementResult.WasCanceled;

            _focusMovementResult.Succeeded = wasMoved;
        }
Exemplo n.º 2
0
        internal bool Focus(FocusState focusState, bool animateIfBringIntoView, FocusNavigationDirection focusNavigationDirection = FocusNavigationDirection.None)
        {
            // Get FocusManager
            var pFocusManager = VisualTree.GetFocusManagerForElement(this, VisualTree.LookupOptions.NoFallback);

            if (pFocusManager == null)
            {
                return(false);
            }

            // FocusMovement is OK with NULL parameter, sets focusChanged to false
            FocusMovement movement = new FocusMovement(this, focusNavigationDirection, focusState);

            movement.AnimateIfBringIntoView = animateIfBringIntoView;
            FocusMovementResult result = pFocusManager.SetFocusedElement(movement);
            var focusChanged           = result.WasMoved;

            return(focusChanged);
        }
Exemplo n.º 3
0
        internal static DirectionalFocusInfo TryDirectionalFocus(IFocusManager focusManager, FocusNavigationDirection direction, DependencyObject searchScope)
        {
            var info = DirectionalFocusInfo.Default;

            if (direction == FocusNavigationDirection.Next ||
                direction == FocusNavigationDirection.Previous ||
                direction == FocusNavigationDirection.None)
            {
                return(info);
            }

            // We do not want to process direction focus if the element is not a UIElement (ie. Hyperlink)
            if (!(searchScope is UIElement uiElement))
            {
                return(info);
            }

            var mode = uiElement.XYFocusKeyboardNavigation;

            if (mode == XYFocusKeyboardNavigationMode.Disabled)
            {
                info.ShouldBubble = false;
            }
            else if (mode == XYFocusKeyboardNavigationMode.Enabled)
            {
                info.DirectionalFocusEnabled = true;
                var xyFocusOptions = XYFocusOptions.Default;
                xyFocusOptions.SearchRoot = searchScope;
                xyFocusOptions.ShouldConsiderXYFocusKeyboardNavigation = true;

                var candidate = focusManager.FindNextFocus(new FindFocusOptions(direction), xyFocusOptions, null, true);

                if (candidate != null)
                {
                    FocusMovementResult result = focusManager.SetFocusedElement(new FocusMovement(candidate, direction, FocusState.Keyboard));
                    info.Handled             = result.WasMoved;
                    info.FocusCandidateFound = true;
                }
            }

            return(info);
        }
Exemplo n.º 4
0
        public void ValidateTryDirectionalFocus()
        {
            var element = new Control();

            element.XYFocusKeyboardNavigation = XYFocusKeyboardNavigationMode.Enabled;

            var candidate = new Control();

            candidate.XYFocusKeyboardNavigation = XYFocusKeyboardNavigationMode.Disabled;

            var focusManagerMock = new MockFocusManager();

            focusManagerMock.FindNextFocusResult = candidate;

            var result = new FocusMovementResult(true, false);

            focusManagerMock.SetFocusedElementResult = result;

            var info = FocusSelection.TryDirectionalFocus(focusManagerMock, FocusNavigationDirection.Right, element);

            Assert.IsTrue(info.Handled);
        }