【问题标题】:IsDefault for WPF button - overriding everything用于 WPF 按钮的 IsDefault - 覆盖所有内容
【发布时间】:2015-05-29 03:31:32
【问题描述】:

是否有一个选项可以强制 Enter 成为某些视图的主键?我想要实现的是,每当我单击“Enter”键时,我想调用将“IsDefault”属性设置为 true 的按钮,无论焦点是什么。

【问题讨论】:

  • @AbinMathew 这不是我的问题的答案。我遇到的问题是,当我单击 button1 然后单击“Enter”时,我的默认按钮没有被调用,但由于焦点再次 button1。我想覆盖所有这些。
  • 如果焦点发生变化,则将焦点设置为 button1 单击事件或命令中的默认按钮。因此,您的默认按钮将在按 Enter 时起作用。
  • 我想有一个通用的想法,所以我完成了在获得任何控制之前捕获所有进入视图的行为。
  • 这就是 IsDefault 所做的

标签: c# wpf button


【解决方案1】:

一种可能性是在RoutedEvent 到达试图对其作出反应的控件之前拦截它:

连接到PreviewKeyDown 事件,只要您想捕获它就可以在可视化树的最上方。如果按下回车键,则在此处做出相应的反应,例如运行与按钮中相同的代码,然后在 eventargs 中将Handled 设置为true

private void previewKeyDownHandler(object sender, KeyEventArgs e)
{
    if(e.Key == Key.Enter || e.Key == Key.Return)
    {
        e.Handled = true;
        //Do your stuff
    }
}

Preview 事件是 WPF 中RoutedEvent 系统的一部分。这两种机制称为隧道和冒泡。 Here you can read more on that.

【讨论】:

  • 这正是我在之前的评论中提到的,但还是感谢您的回答:)
  • 抱歉,没有扩展 cmets,因此错过了您的 - 我刚想到这个解决方案,但还没有人发布答案。很高兴你得到了一些可行的东西:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 2014-10-14
  • 2018-12-21
  • 1970-01-01
  • 2020-11-13
相关资源
最近更新 更多