Silverlight 4控件的默认键盘行为是否有参考文献?

34

在官方的微软文档中,只有一个段落提到了控件如何响应键盘(至少我所能找到的):

http://msdn.microsoft.com/en-us/library/cc189015(v=VS.95).aspx#inputting_text

文本输入和控件

某些控件会对键盘事件做出自己的反应。例如,TextBox 是一个控件,旨在捕获并可视化使用键盘输入的文本,并在其自身逻辑中使用 KeyUp 和 KeyDown 捕获按键,如果文本实际发生更改,则还会引发自己的 TextChanged 事件。您仍然可以向 TextBox 或任何相关控件添加 KeyUp 和 KeyDown 处理程序,以处理文本输入。但是,作为其预期设计的一部分,控件可能不会响应通过键事件传递给它的所有键值。行为针对每个控件具体而言。例如,ButtonBase(Button 的基类)处理 KeyUp,以便它可以检查 SPACEBAR 或 ENTER 键,将其视为鼠标左键按下,以便触发 Click 事件。此事件的处理是通过 ButtonBase 覆盖虚拟方法 OnKeyUp 来完成的,在其实现中设置 Handled = true。结果是,任何父按钮都无法接收到已处理过的 SPACEBAR 键事件,以供其自己的处理程序使用。另一个例子是 TextBox。一些键,如 ARROW 键,被 TextBox 视为非文本内容,而是被视为特定于控件 UI 行为的内容,因此 TextBox 将这些事件情况标记为已处理。

自定义控件可以通过覆盖 OnKeyDown / OnKeyUp 来实现其自己的类似重写行为,以响应键事件。如果您的自定义控件处理特定的加速键或具有类似于 TextBox 的控制或焦点行为的情况,则应将此逻辑放在您自己的 OnKeyDown / OnKeyUp 覆盖中。

是否有更完整的参考资料?

例如,在AutoCompleteBox中,您可以按上/下箭头导航到建议,并按Enter键选择其中一个等等。当然,肯定有比专注于每个控件并按下键盘上的每个键来查找更好的方法 :)

也许这会有所帮助……http://www.dummies.com/how-to/content/silverlight-4-for-dummies-cheat-sheet.html - Aeonius
3个回答

1

查看源代码\反射器。

控件文本处理中有很多怪癖,我怀疑任何人都不会关心这个。例如,当控件内有文本时,按下BackSpace时TextBox的KeyDown事件不会触发,但是在没有文本时会触发等等。找出某些东西如何工作的最快方法是深入源代码。

我想出了一个好规则:如果由于某种原因您需要知道某个控件在某种情况下的行为方式,请不要浪费时间尝试编写(重现)此情况,只需获取Reflector并查看源代码即可。


我将此标记为已接受的答案,因为迄今为止这是最健壮的方法,但我私下里希望至少有一些众包参考资料存在... :) - dain

1

这差不多就是了 :) 我猜Silverlight控件或多或少必须遵守Windows设计准则,所以这是个好想法,但似乎这个参考资料有更全局的键盘快捷键,大多数是键组合 :( - dain

0

本教程描述了如何将键盘快捷键添加到自定义控件中,但我需要的是内置控件(甚至是Silverlight Toolkit控件)的参考资料。 - dain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接