示例#1
0
        /// <summary>
        /// Moves the selected item in the specified direction.
        /// </summary>
        private void MoveSelectedItem(FocusNavigationDirection direction, ModifierKeys modifiers = ModifierKeys.None)
        {
            var selection = Keyboard.GetFocusedElement(View) as UIElement;

            if (selection != null && selection.MoveFocus(direction))
            {
                var focused     = Keyboard.GetFocusedElement(View) as UIElement;
                var listBoxItem = ItemsControlUtil.FindContainer <ListBoxItem>(this, focused);
                if (listBoxItem != null && (modifiers & ModifierKeys.Control) != ModifierKeys.Control)
                {
                    HandleItemClickedAndScrollIntoView(listBoxItem);
                }
            }
        }
示例#2
0
        /// <inheritdoc/>
        protected override void OnGamePadButtonDown(GamePadDevice device, GamePadButton button, Boolean repeat, RoutedEventData data)
        {
            if (GamePad.ConfirmButton == button)
            {
                var listBoxItem = ItemsControlUtil.FindContainer <ListBoxItem>(this, data.OriginalSource);
                if (listBoxItem != null)
                {
                    HandleItemClicked(listBoxItem);
                    data.Handled = true;
                }
            }
            else
            {
                switch (button)
                {
                case GamePadButton.LeftStickLeft:
                    PART_ScrollViewer?.LineLeft();
                    data.Handled = true;
                    break;

                case GamePadButton.LeftStickRight:
                    PART_ScrollViewer?.LineRight();
                    data.Handled = true;
                    break;

                case GamePadButton.LeftStickUp:
                    if (SelectionMode == SelectionMode.Single)
                    {
                        MoveSelectedItem(FocusNavigationDirection.Up);
                    }
                    data.Handled = true;
                    break;

                case GamePadButton.LeftStickDown:
                    if (SelectionMode == SelectionMode.Single)
                    {
                        MoveSelectedItem(FocusNavigationDirection.Down);
                    }
                    data.Handled = true;
                    break;
                }
            }

            base.OnGamePadButtonDown(device, button, repeat, data);
        }
        /// <summary>
        /// Performs tab navigation while focus is within the drop down.
        /// </summary>
        private void PerformTabNavigation(Key key, ModifierKeys modifiers)
        {
            var shift = ((modifiers & ModifierKeys.Shift) == ModifierKeys.Shift);
            var ctrl  = ((modifiers & ModifierKeys.Control) == ModifierKeys.Control);

            var focused = Keyboard.GetFocusedElement(View) as UIElement;

            if (FocusNavigator.PerformNavigation(View, focused, shift ? FocusNavigationDirection.Previous : FocusNavigationDirection.Next, ctrl))
            {
                focused = Keyboard.GetFocusedElement(View) as UIElement;

                var container = (focused == null) ? null : ItemsControlUtil.FindContainer <ComboBoxItem>(this, focused);
                if (container != null)
                {
                    ItemsControlUtil.ScrollItemIntoView <ComboBoxItem>(this, PART_ScrollViewer, container);
                }
            }
        }
示例#4
0
        /// <inheritdoc/>
        protected override void OnKeyDown(KeyboardDevice device, Key key, ModifierKeys modifiers, RoutedEventData data)
        {
            switch (key)
            {
            case Key.Space:
            case Key.Return:
                if (key == Key.Return && !GetValue <Boolean>(KeyboardNavigation.AcceptsReturnProperty))
                {
                    break;
                }

                var listBoxItem = ItemsControlUtil.FindContainer <ListBoxItem>(this, data.OriginalSource);
                if (listBoxItem != null)
                {
                    HandleItemClicked(listBoxItem);
                    data.Handled = true;
                }
                break;

            case Key.Left:
                PART_ScrollViewer?.LineLeft();
                data.Handled = true;
                break;

            case Key.Right:
                PART_ScrollViewer?.LineRight();
                data.Handled = true;
                break;

            case Key.Up:
                if (SelectionMode == SelectionMode.Single)
                {
                    MoveSelectedItem(FocusNavigationDirection.Up, modifiers);
                }
                data.Handled = true;
                break;

            case Key.Down:
                if (SelectionMode == SelectionMode.Single)
                {
                    MoveSelectedItem(FocusNavigationDirection.Down, modifiers);
                }
                data.Handled = true;
                break;

            case Key.Home:
                var firstItem = ItemsControlUtil.GetFirstItem <ListBoxItem>(this, PART_ScrollViewer);
                if (firstItem != null && firstItem.Focus())
                {
                    HandleItemClickedAndScrollIntoView(firstItem);
                }
                data.Handled = true;
                break;

            case Key.End:
                var lastItem = ItemsControlUtil.GetLastItem <ListBoxItem>(this, PART_ScrollViewer);
                if (lastItem != null && lastItem.Focus())
                {
                    HandleItemClickedAndScrollIntoView(lastItem);
                }
                data.Handled = true;
                break;

            case Key.PageUp:
                var pageUpTarget = ItemsControlUtil.GetPageUpNext <ListBoxItem>(this, PART_ScrollViewer);
                if (pageUpTarget != null && pageUpTarget.Focus())
                {
                    HandleItemClickedAndScrollIntoView(pageUpTarget, false);
                }
                data.Handled = true;
                break;

            case Key.PageDown:
                var pageDownTarget = ItemsControlUtil.GetPageDownNext <ListBoxItem>(this, PART_ScrollViewer);
                if (pageDownTarget != null && pageDownTarget.Focus())
                {
                    HandleItemClickedAndScrollIntoView(pageDownTarget, false);
                }
                data.Handled = true;
                break;
            }

            base.OnKeyDown(device, key, modifiers, data);
        }