【问题标题】:How to make a submit button in WPF?如何在 WPF 中制作提交按钮?
【发布时间】:2011-05-10 19:36:45
【问题描述】:

当您在 HTML form 中的任意位置按 Enter 时,它会触发其 action,这相当于按 submit 按钮。 如何制作一个窗口,当我在任何地方按 Enter 时它会触发事件?

【问题讨论】:

  • WPF 中是否有关键预览属性?如果是这样,将其设置为 true 会将所有按键直接发送到表单,您可以使用 keypress 事件来执行此操作。

标签: wpf submit keypress


【解决方案1】:

在 XAML 中将 PreviewKeyDown 事件分配给窗口,然后检查代码隐藏中的 KeyEventArgs 以确定用户是否按下了 Enter 键。

XAML 代码:

<Window
    [...]
    PreviewKeyDown="Window_PreviewKeyDown">

后面的代码:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        // Whatever code you want if enter key is pressed goes here
    }
}

【讨论】:

  • 抱歉,我刚刚意识到您没有说表单上有按钮。您必须在表单上有一个按钮才能使用。
  • 如果没有,只需将 IsHitTestVisible="true" 添加到 Window 属性中
  • 警告:此事件将在窗口中的任何控件上触发,甚至是其他按钮。这通常不是问题,除非您的用户在表单周围使用 Tab 并使用 Enter 来单击按钮。
  • @WalterStabosz 当您使用 Tab 键时,无论如何都应该使用空格按钮来激活突出显示的按钮 :)
【解决方案2】:

将按钮上的IsDefault 属性 设置为true 以启用Enter 键来激活该按钮的操作。还有一个 IsCancel 属性对 Escape 键执行相同的操作。

【讨论】:

  • 这是我在下面回答中的第一个建议,但后来我注意到 XMLforDummies 并没有说他/她在表单上有“确定”或“提交”按钮,所以我编辑了我的答案。使用此解决方案可能遇到的唯一“问题”是,如果“确定”/“提交”按钮以外的按钮具有焦点,则按 Enter 键只会单击焦点按钮,不会触发其他事件,即可能是您所期望的,但只是想提出这一点。
  • 我认为这种行为是故意的。例如,如果该按钮打开了一个模态对话框,并且通过按 Enter 键触发提交,那么您不希望这两个事件都触发。
【解决方案3】:

我发现DatePicker 控件会吞下 Enter 按键,因此默认按钮不会被点击。我写了这个事件处理程序来解决这个问题。使用PreviewKeyUp 确保DatePicker 在单击默认按钮之前执行其日期格式代码。

private void DatePicker_PreviewKeyUp(object sender, KeyEventArgs e) {
    // event handler to click the default button when you hit enter on DatePicker
    if (e.Key == Key.Enter) {
        // https://www.codeproject.com/Tips/739358/WPF-Programmatically-click-the-default-button
        System.Windows.Input.AccessKeyManager.ProcessKey(null, "\x000D", false);
    }
}

【讨论】:

    【解决方案4】:
    <Button Name="btnDefault" IsDefault="true" Click="OnClickDefault">OK</Button>
    

    您可以通过将按钮的 IsDefault 属性设置为 True 来做到这一点。

    您可以从微软的文档中获得详细信息。

    Button.IsDefault Property

    【讨论】:

      猜你喜欢
      • 2020-12-15
      • 2017-10-24
      • 2015-12-27
      • 1970-01-01
      • 2011-11-23
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多