【问题标题】:Using enter to click a button使用 enter 单击按钮
【发布时间】:2015-11-12 04:42:30
【问题描述】:

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

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

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

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

【问题讨论】:

  • 尝试在 Keyup_event 中设置 Button.IsPressed False

标签: wpf events button keypress


【解决方案1】:

符合this

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

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

我不建议您更改它,但如果您愿意,您应该:

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多