如何在 WPF 中制作提交按钮?

当你按下 Enter在 HTML form的任何地方它触发它的 action,这相当于按下 submit按钮。 如何使一个窗口,当我按 Enter的任何地方,它将触发一个事件?

45566 次浏览

在 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
}
}

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

我发现 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);
}
}
<Button Name="btnDefault" IsDefault="true" Click="OnClickDefault">OK</Button>

为此,可以将按钮 IsDefault 属性设置为 True。

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

按钮。是默认属性

根据这个 https://wpf.2000things.com/tag/isdefault/

如果满足以下所有条件,则 IsDefault 为 true:

  1. 按钮的 IsDefault 设置为 true
  2. 其他一些控件当前具有焦点
  3. 当前具有焦点的控件本身不处理 ENTER 键

在我的情况下,我试图从 TextBox中按 Enter,它已经处理了 Enter 键。周转是为 TextBox设置 AcceptsReturn = false。如果您不需要多行文本框,并且 Enter Key 应该提交输入的文本,则此选项可以工作。 此外,文本绑定应该在键入时更新

<TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}"
AcceptsReturn="False"/>