使用回车键点击按钮

Using enter to click a button

基本上我想给 Enter 相同的行为 Space。我面临的第一个问题是,当按住键时,按钮会继续开火。我通过侦听 PreviewKeyDown 并在 IsRepeat 属性 为真时将其标记为已处理来解决该问题。

我无法解决的第二个问题是使用 IsPressedTrigger 在按下 Enter 时不会关闭。这是触发器。

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

Enter有什么特别之处吗?确实单击了按钮,但未激活触发器。

符合this:

IsPressed is the state of a button that indicates the left mouse button or SPACEBAR is pressed over the button. When IsPressed is true, the control captures the mouse. As a result, the control will raise mouse events such as MouseEnter and IsMouseDirectlyOverChanged. Note that using the AccessText or ENTER does not change IsPressed or capture the mouse, but is does raise the Click event.

即,您的控件行为正常。

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

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

希望,有帮助