Как полностью ориентироваться в приложении UWP с помощью только клавиатуры - PullRequest
1 голос
/ 24 июня 2019

Я пытаюсь дать своему приложению возможность работать только с клавишами клавиатуры.Я хочу, чтобы он работал под контролируемыми границами, такими как управление F9 и F10 влево и вправо на панели навигации, управление F7 и F8 вверх и вниз внутри элементов страницы и т. Д. Я знаю, что вы можете перемещаться по каждому элементу на экране, непрерывно нажимая клавишу Tab.но я хочу сделать его более эффективным и ограниченным для пользователя.

По сути, мне интересно, как бы я создал собственную схему навигации с такими границами, как упомянуто выше, ограничивая только границы навигации определенного набора клавишпросто на панель вкладок страницы вверху или просто прокручивая вверх и вниз определенные элементы на странице.

Вот пример страницы настроек, у меня возникают проблемы при полной навигации SettingsPage

До сих пор я пытался сделать это, установив вкладку «Навигация по вкладкам» на «цикл» в определенных границах элементов, а затем используя определенные клавиши клавиатуры для запуска кода, имитирующего нажатие на вкладку или обратную вкладку:

        void TabLeft()
        {
            InputInjector inputInjector = InputInjector.TryCreate();
            var shift = new InjectedInputKeyboardInfo();
            shift.VirtualKey = (ushort)(VirtualKey.Shift);
            shift.KeyOptions = InjectedInputKeyOptions.None;

            var tab = new InjectedInputKeyboardInfo();
            tab.VirtualKey = (ushort)(VirtualKey.Tab);
            tab.KeyOptions = InjectedInputKeyOptions.None;
            inputInjector.InjectKeyboardInput(new[] { shift, tab });
            shift.KeyOptions = InjectedInputKeyOptions.KeyUp;
            tab.KeyOptions = InjectedInputKeyOptions.KeyUp;
        }

        void TabRight()
        {
            InputInjector inputInjector = InputInjector.TryCreate();
            var info = new InjectedInputKeyboardInfo();
            info.VirtualKey = (ushort)(VirtualKey.Tab);
            inputInjector.InjectKeyboardInput(new[] { info });
        }

У меня также естьпопытался обнаружить определенные нажатия клавиш и заставить код имитировать канун щелчкаНет на одну из кнопок на экране.Этот код работает, получая индекс следующей кнопки влево или вправо и имитируя нажатие на нее.

ButtonAutomationPeer peer;
IInvokeProvider invokeProv = null;
ContentPresenter cp = ItemsControlElement.ContainerFromIndex(IndexofNextButton) as ContentPresenter;
peer = new ButtonAutomationPeer(MainPageViewModel.FindVisualChild<Button>(cp));
invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();

Оба работают в определенной степени, но не в полной мере, в которой я нуждаюсь.Одна проблема, с которой я столкнулся, - это страница настроек, которую я сделал.Я хочу иметь возможность перейти на страницу с помощью клавиш клавиатуры через панель вкладок страницы.Затем я должен был перемещаться по странице с помощью других клавиш и, наконец, иметь возможность редактировать текстовые поля настроек.До сих пор я не нашел эффективного способа управления навигационным путем, а также диспетчером фокуса.Любые идеи или помощь будут высоко ценится!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...