不处理由按键引起的按钮点击
Do not handle button click when caused by key press
我有一个 WPF 项目。在这个项目中的某个时候,我在代码后面动态制作按钮,如下所示:
private Button makeButton()
{
Button b = new Button();
b.Width = 24;
b.Height = 19;
b.Click += ButtonClick;
return b;
}
ButtonClick 所在位置:
public void ButtonClick(object sender, RoutedEventArgs e)
{
// Do stuff...
}
有时会在按下 enter 时调用事件处理程序,即使按钮未获得焦点。
所以我的问题是,当它由 enter 引起时,如何禁用处理此事件。
谢谢你
在您按下 Enter 之前,它可能正在聚焦。
无论如何,您可以尝试将 Focusable
属性 设置为 false
:
b.Focusable = false;
还要确保您没有将 IsDefault
属性 设置为 true
。
我遇到了同样的问题。使用 PreviewMouseLeftButtonUp 事件解决了我的问题。当您使用 enter
按钮时它不会雇用
我不确定按钮未聚焦时这是怎么回事。也许这是合乎逻辑的而不是键盘焦点。
能有一个最小的复制品就好了。
您可以尝试两件事。
1)
使用按钮上的 previewkeydown 事件吃回车键,以防按键以某种方式转到按钮。将事件标记为已处理将停止触发 keydown 事件,因此如果按钮以某种方式合乎逻辑地接收到按键,则不会输入任何内容。
b.PreviewKeyDown += (o, e) =>
{
if (e.Key == Key.Enter) e.Handled = true;
};
在按钮上设置 IsDefault="False",以防它们以某种方式被设置为默认值。
我有一个 WPF 项目。在这个项目中的某个时候,我在代码后面动态制作按钮,如下所示:
private Button makeButton()
{
Button b = new Button();
b.Width = 24;
b.Height = 19;
b.Click += ButtonClick;
return b;
}
ButtonClick 所在位置:
public void ButtonClick(object sender, RoutedEventArgs e)
{
// Do stuff...
}
有时会在按下 enter 时调用事件处理程序,即使按钮未获得焦点。 所以我的问题是,当它由 enter 引起时,如何禁用处理此事件。
谢谢你
在您按下 Enter 之前,它可能正在聚焦。
无论如何,您可以尝试将 Focusable
属性 设置为 false
:
b.Focusable = false;
还要确保您没有将 IsDefault
属性 设置为 true
。
我遇到了同样的问题。使用 PreviewMouseLeftButtonUp 事件解决了我的问题。当您使用 enter
按钮时它不会雇用
我不确定按钮未聚焦时这是怎么回事。也许这是合乎逻辑的而不是键盘焦点。
能有一个最小的复制品就好了。
您可以尝试两件事。
1)
使用按钮上的 previewkeydown 事件吃回车键,以防按键以某种方式转到按钮。将事件标记为已处理将停止触发 keydown 事件,因此如果按钮以某种方式合乎逻辑地接收到按键,则不会输入任何内容。
b.PreviewKeyDown += (o, e) =>
{
if (e.Key == Key.Enter) e.Handled = true;
};
在按钮上设置 IsDefault="False",以防它们以某种方式被设置为默认值。