我正在开发一个UWP应用程序,该应用程序实际上没有任何内置键盘处理控件,它是Grid
的一棵大树,其中有InkCanvas
,Win2D
,常规Canvas
,Image
等
我在KeyDown
上声明了PreviewKeyDown
和Page
处理程序,但是当我在基本设置中按一个按钮时,它们不会被调用。
我发现可以从页面上调用Focus(FocusState.Programmatic);
,然后收到关键事件,但是直到我将注意力集中在(单击)InkCanvas
上。
然后我在文档中找到了Keyboard alternatives to pointer actions and events for specific control elements部分。建议在自己的自定义控件上设置IsTabStop
,或将所有内容包装在<Button>
中。
后一种工作,我可以将根Grid
包在Button
中,然后无论我最后一次关注哪个元素,每次都会触发KeyDown
。 />
这只是感觉是完全错误的,并且还会创建一些视觉上的“伪像”。 (它在所有内容周围绘制一个按钮...)
IsTabStop
也可以,但是我需要开始将所有内容包装在自定义控件中(例如Image
)。它似乎并没有在树上“继承”。
这方面是否有最佳实践?在我的应用程序中处理任何按键都不应该那么难,对吗?