我正在开发一个 UWP 应用程序,它实际上没有任何预建键盘处理附带的控件——它是一个Grids 的大树,其中包括 an InkCanvas、 a Win2D、 regular Canvas、 anImage等。
我已经在我的 上声明KeyDown和PreviewKeyDown处理程序Page,但是当我在基本设置中按下按钮时它们不会被调用。
我发现我可以Focus(FocusState.Programmatic);从我的页面调用,然后我收到关键事件,但直到我将焦点放在(单击)InkCanvas例如。
然后我在文档中找到了针对特定控件元素的指针操作和事件的键盘替代部分。它建议设置IsTabStop我自己的自定义控件,或者将所有内容包装在<Button>.
后者有点工作,我可以将我的根包裹Grid在 a 中Button,然后KeyDown每次都触发,无论我最后关注哪个元素。
这只是感觉完全错误,它还创造了一些视觉“伪影”。(它在所有东西周围画了一个按钮......)
IsTabStop也可以,但是我需要开始将所有内容包装在自定义控件中(例如Image)。它似乎没有“继承”树。
有没有围绕这个的最佳实践?在我的应用程序中处理任何按键都不应该那么难,不是吗?