2013-12-18 36 views
2

我需要停止F4的ComboBox的默认功能。当用Google搜索时,我遇到了各种各样的解决方案,包括combobox的预览。但对于我的要求,我不能限制预览日期事件。任何其他方式来处理这种情况?如果它是组合框中的错误,则可以使用任何其他解决方法来获取F4键的keydown事件。WPF:ComboBox F4键在KeyDown中没有触发事件

+1

天真的答案:扩展组合框,覆盖OnKeyDown,不要在f4上调用基础实现。 http://msdn.microsoft.com/en-us/library/system.windows.controls.combobox.onkeydown(v=vs.110).aspx – Will

+0

@ user2956667请接受我的解决方案作为让别人知道的答案。 – lifestyle

回答

0

如果你想在你的应用程序中禁用所有的ComboBox,那么你可以这样做。 注册您的KeyDown for ComboBox应用程序范围。您可以(如果你使用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移动焦点。

0

虽然我知道这个问题是旧的,但我写我棘手的解决方案(因为我没有发现它在Web)的人从事这个问题:

我必须说,这种行为是不是一个错误,这是对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; 
     })); 
    } 
} 

这样,您可以实现自己的替代工作或者只是禁用标准的常见Windows行为。