代码之家  ›  专栏  ›  技术社区  ›  dain

是否有Silverlight 4控件的默认键盘行为的参考?[关闭]

  •  34
  • dain  · 技术社区  · 14 年前

    在微软官方文档中,只有一段提到了控件在键盘上的行为(至少我能找到的):

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

    文本输入和控件

    某些控件用自己的处理方式对键盘事件作出反应。例如,TextBox是一个控件,它被设计用来捕获并直观地表示通过键盘输入的文本,它在自己的逻辑中使用KeyUp和KeyDown来捕获击键,如果文本实际发生更改,则还会引发自己的text changed事件。通常,您仍然可以将KeyUp和KeyDown的处理程序添加到文本框或任何旨在处理文本输入的相关控件。但是,作为其预期设计的一部分,控件可能不会响应通过键事件指向它的所有键值。行为特定于每个控件。例如,ButtonBase(Button的基类)处理KeyUp,以便它可以检查空格键或ENTER键,它认为这相当于鼠标左键向下以引发单击事件。此事件处理是通过ButtonBase重写虚拟方法OnKeyUp完成的,在其实现中,它将Handled设置为true。结果是,在空格键的情况下侦听键事件的按钮的任何父级都不会接收其自身处理程序的已处理事件。另一个例子是文本框。某些键(如箭头键)不被文本框视为文本,而是被视为特定于控件UI行为,文本框将这些事件案例标记为已处理。

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

    有更完整的参考资料吗?

    例如,在自动完成框中,您可以按向上/向下键导航到建议,然后按回车键选择一个建议,等等。

    当然,肯定有一种更好的方法,而不是集中每一个控件并按下键盘上的每一个键来找出答案:)

    3 回复  |  直到 14 年前
        1
  •  1
  •   Alex Burtsev    13 年前

    查看源代码\反射器。

    控件文本处理有很多怪癖,我怀疑是否有人会注意到这一点。例如,当控件中有文本时,当用户按BackSpace键时,不会触发文本框的KeyDown事件,但在没有文本时触发,等等。找到工作方式的最快方法是挖掘源代码。

    我已经想出了一个很好的规则:如果出于某种原因,你需要知道某个控件在某些情况下将如何工作,不要浪费时间试图编码(再现)这种情况,只需获取Reflector并查看源代码。

        2
  •  1
  •   Ian P    13 年前
        3
  •  0
  •   Jimmy    13 年前