Я пытаюсь дать своему приложению возможность работать только с клавишами клавиатуры.Я хочу, чтобы он работал под контролируемыми границами, такими как управление F9 и F10 влево и вправо на панели навигации, управление F7 и F8 вверх и вниз внутри элементов страницы и т. Д. Я знаю, что вы можете перемещаться по каждому элементу на экране, непрерывно нажимая клавишу Tab.но я хочу сделать его более эффективным и ограниченным для пользователя.
По сути, мне интересно, как бы я создал собственную схему навигации с такими границами, как упомянуто выше, ограничивая только границы навигации определенного набора клавишпросто на панель вкладок страницы вверху или просто прокручивая вверх и вниз определенные элементы на странице.
Вот пример страницы настроек, у меня возникают проблемы при полной навигации
До сих пор я пытался сделать это, установив вкладку «Навигация по вкладкам» на «цикл» в определенных границах элементов, а затем используя определенные клавиши клавиатуры для запуска кода, имитирующего нажатие на вкладку или обратную вкладку:
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();
Оба работают в определенной степени, но не в полной мере, в которой я нуждаюсь.Одна проблема, с которой я столкнулся, - это страница настроек, которую я сделал.Я хочу иметь возможность перейти на страницу с помощью клавиш клавиатуры через панель вкладок страницы.Затем я должен был перемещаться по странице с помощью других клавиш и, наконец, иметь возможность редактировать текстовые поля настроек.До сих пор я не нашел эффективного способа управления навигационным путем, а также диспетчером фокуса.Любые идеи или помощь будут высоко ценится!