dai*_*ain 34 keyboard documentation silverlight default behavior
在官方的Microsoft文档中,只有一个段落提到了控件对键盘的行为(至少我能找到的):
http://msdn.microsoft.com/en-us/library/cc189015(v=VS.95).aspx#inputting_text
文本输入和控件
某些控件通过自己的处理对键盘事件做出反应.例如,TextBox是一个控件,用于捕获然后直观地表示使用键盘输入的文本,它在自己的逻辑中使用KeyUp和KeyDown来捕获击键,然后在文本中引发自己的TextChanged事件.实际上改了.您仍然可以将KeyUp和KeyDown的处理程序添加到TextBox或任何旨在处理文本输入的相关控件.但是,作为其预期设计的一部分,控件可能不会响应通过键事件定向到它的所有键值.行为特定于每个控件.例如,ButtonBase(Button的基类)处理KeyUp,以便它可以检查SPACEBAR或ENTER键,为了引发Click事件,它认为相当于鼠标左键按下.事件的处理是通过ButtonBase覆盖虚拟方法OnKeyUp来完成的,并且在其实现中它设置Handled = true.结果是,在空格键的情况下,监听键事件的按钮的任何父节点都不会为其自己的处理程序接收已处理的事件.另一个例子是TextBox.诸如ARROW键之类的某些键不被TextBox视为文本,而是被视为特定于控件UI行为,而TextBox将这些事件案例标记为已处理.结果是,在空格键的情况下,监听键事件的按钮的任何父节点都不会为其自己的处理程序接收已处理的事件.另一个例子是TextBox.诸如ARROW键之类的某些键不被TextBox视为文本,而是被视为特定于控件UI行为,而TextBox将这些事件案例标记为已处理.结果是,在空格键的情况下,监听键事件的按钮的任何父节点都不会为其自己的处理程序接收已处理的事件.另一个例子是TextBox.诸如ARROW键之类的某些键不被TextBox视为文本,而是被视为特定于控件UI行为,而TextBox将这些事件案例标记为已处理.
自定义控件可以通过重写OnKeyDown/OnKeyUp为键事件实现自己类似的覆盖行为.如果您的自定义控件处理特定的加速键,或者具有与TextBox描述的场景类似的控件或焦点行为,则应将此逻辑放在您自己的OnKeyDown/OnKeyUp覆盖中.
在任何地方都有更完整的参考吗?
例如,在AutoCompleteBox中,您可以导航到按向上/向下的建议,并选择按下输入等等.
当然必须有一个更好的方法,而不是集中每一个控件并按下键盘上的每一个键来找出:)
查看源代码\Reflector。
控件文本处理中有很多怪癖,我怀疑是否有人愿意记录这一点。例如,当用户在控件内有文本时按 BackSpace 时,不会触发 TextBox 的 KeyDown 事件,但在没有文本时触发,等等。了解某些内容如何工作的最快方法是深入源代码。
我想出了一个很好的规则:如果出于某种原因您需要知道某些控件在某些情况下的行为方式,请不要浪费时间尝试编码(重现)这种情况,只需获取 Reflector 并查看源代码即可。
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |