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

时间:2013-12-18 13:59:30

标签: c# wpf combobox wpf-controls keydown

我需要停止F4的ComboBox默认功能。在谷歌搜索时,我遇到了各种解决方案,使用了combobox的预览。但是根据我的要求,我无法限制previewkeydown事件。还有其他办法处理这种情况吗?如果它是组合框中的错误,那么任何其他解决方法都可以获得F4密钥的keydown事件。

2 个答案:

答案 0 :(得分: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移动重点放在输入上。

答案 1 :(得分: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;
      }));
   }
}

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