不处理由按键引起的按钮点击

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",以防它们以某种方式被设置为默认值。