【发布时间】:2011-05-10 19:36:45
【问题描述】:
当您在 HTML form 中的任意位置按 Enter 时,它会触发其 action,这相当于按 submit 按钮。
如何制作一个窗口,当我在任何地方按 Enter 时它会触发事件?
【问题讨论】:
-
WPF 中是否有关键预览属性?如果是这样,将其设置为 true 会将所有按键直接发送到表单,您可以使用 keypress 事件来执行此操作。
当您在 HTML form 中的任意位置按 Enter 时,它会触发其 action,这相当于按 submit 按钮。
如何制作一个窗口,当我在任何地方按 Enter 时它会触发事件?
【问题讨论】:
在 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
}
}
【讨论】:
【讨论】:
我发现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 来做到这一点。
您可以从微软的文档中获得详细信息。
【讨论】: