我正在尝试使我的应用程序只能使用键盘按键。我希望它在导航栏中的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 });
}
我还尝试检测某些按键,并让代码模拟屏幕上按钮之一上的click事件。该代码的工作原理是使下一个按钮的索引位于左侧或右侧,并模拟单击它。
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();
两种工作都在一定程度上进行,但没有达到我需要的全部能力。我遇到的一个问题是我设置的页面。我希望能够使用键盘键通过页面选项卡栏导航到页面。然后,我要使用其他键向下浏览页面,最后可以编辑设置文本框。到目前为止,我还没有找到控制导航路径和焦点管理器的有效方法。任何想法或帮助将不胜感激!