首页 文章

WPF:ComboBox F4键未在KeyDown事件中触发

提问于
浏览
3

我需要停止F4的ComboBox默认功能 . 在谷歌搜索时,我遇到了各种解决方案,其中包括了预装组合框 . 但是根据我的要求,我无法限制previewkeydown事件 . 还有其他办法处理这种情况吗?如果它是组合框中的错误,任何其他解决方法来获取F4键的keydown事件 .

2 回答

  • 0

    虽然我知道这个问题已经过时了,但是我写了一个棘手的解决方案(因为我没有在网上找到它)来解决这个问题:

    我必须说这种行为不是一个错误,它是Windows上所有标准下拉(ComboBox)控件的常见操作 .

    您可以使用 CommandBinding 在WPF中简单地覆盖它 .

    public class MyWindow
    {
       private static readonly RoutedCommand DummyEmptyCommand = new RoutedCommand("DummyEmptyCommand", typeof(MyWindow), new InputGestureCollection() { new KeyGesture(Key.F4) });
    
       public MyWindow()
       {
          MyComboBox.CommandBindings.Add(new CommandBinding(DummyEmptyCommand, (o, e) => 
          { 
             // Do your work here or simply leave it blank to disable F4 common behavior;
          }));
       }
    }
    

    通过这种方式,您可以实现自己的替代工作,或者只是禁用标准的常见窗口行为 .

  • 0

    如果要在应用程序中禁用所有ComboBox,则可以执行此操作 . 在ComboBox应用程序范围内注册KeyDown . 您可以在应用程序启动时添加此语句(如果您使用的是MVVM,则为App.xaml.cs或AppBootStrapper)

    EventManager.RegisterClassHandler(typeof(ComboBox) ,UIElement.KeyDownEvent ,new KeyEventHandler((sender ,e) =>
    {
        var cb = sender as ComboBox;
        if ( cb != null && e.Key == Key.F4 )
            e.Handled = true;   
    }));
    

    请注意,这未经过测试 . 我使用类似的方法将TextBox移动重点放在enter上 .

相关问题