2010-11-17 60 views
34

在微软官方文档,只有一个段落提控件的行为,以键盘(至少是我能找到):Silverlight 4控件的默认键盘行为是否有参考?

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。结果是,在SPACEBAR的情况下侦听键事件的按钮的任何父母将不会接收其自己的处理程序的已处理事件。另一个例子是TextBox。某些键(如ARROW键)不被TextBox视为文本,而是被视为特定于控件UI行为,TextBox将这些事件案例标记为已处理。

通过重写OnKeyDown/OnKeyUp,自定义控件可以为关键事件实现自己的类似重写行为。如果您的自定义控件处理特定的加速键,或者具有与TextBox所描述的场景类似的控件或焦点行为,则应该将此逻辑放在您自己的OnKeyDown/OnKeyUp覆盖中。

是否有更完整的参考?

例如在AutoCompleteBox可以导航到建议按上/下,选择一个按压进入,等等等等

完全可以有不是集中的每一个控制和压在每一个关键的一个更好的办法键盘找出:)

+0

也许这将有助于.... HTTP:// WWW。 dummies.com/how-to/content/silverlight-4-for-dummies-cheat-sheet.html – Aeonius 2011-05-12 17:04:12

回答

1

看在源代码\反射器。

在控制文本处理中有许多怪癖,我怀疑任何人都会在意这些。例如,当用户在控件内部存在文本时按下BackSpace时,TextBox的KeyDown事件不会被触发,但在没有文本时触发。等等。

我已经想出了一个很好的规则:如果由于某种原因,您需要知道某些控件的行为方式是否会浪费您试图编码(重现)这种情况的时间,只需获取Reflector并查看源代码。

+0

我将此标记为已接受的答案,因为迄今为止这是最稳健的方式,但我暗中希望有至少有一些群众来源的参考... :) – dain 2011-10-15 11:01:14

相关问题