使用回车点击按钮

时间:2015-08-19 03:30:48

标签: wpf events button keypress

基本上我想EnterSpace一样的行为PreviewKeyDown。我面临的第一个问题是,当按住按钮时,按钮会继续发射。我通过监听IsRepeat并在Trigger属性为真时将其标记为已处理来解决这个问题。

我无法理解的第二个问题是,使用IsPressed的{​​{1}}在按Enter后不会消失。这是触发器。

<Trigger Property="IsPressed"
         Value="True">
    <Setter TargetName="Background"
            Property="Background"
            Value="{DynamicResource ButtonPressedBrush}" />
</Trigger>

Enter有点特别吗?单击该按钮,但触发器未激活。

1 个答案:

答案 0 :(得分:1)

符合this

  

IsPressed是一个按钮的状态,表示鼠标左键或按钮上的空格键。当IsPressed为true时,控件捕获鼠标。因此,该控件将引发鼠标事件,如MouseEnter和IsMouseDirectlyOverChanged。请注意,使用AccessText或ENTER不会更改IsPressed或捕获鼠标,但确实会引发Click事件。

即,您的控件的行为是正常的。

我不建议你改变它,但如果你愿意,你应该:

  • 创建新类(例如,ButtonEx)
  • 从Button或ButtonBase继承它
  • 订阅KeyDown路由事件(在构造函数或其他位置) OR 覆盖OnKeyDown
  • 订阅KeyUp路由事件(在构造函数或其他位置) OR 覆盖OnKeyUp
  • 实现您想要的行为,即检查按键上的Enter是否按下并在按键时释放并相应地更改IsPressed

希望,这有帮助