How do I stop WPF KeyDown events from bubbling up from certain contained controls (such as TextBox)?

前端 未结 2 878
庸人自扰
庸人自扰 2021-02-20 12:57

My program is quite large, and uses WPF, and I want to have a global shortcut key that uses \'R\', with no modifiers.
There are many controls such as TextBox, ListBox, Combo

相关标签:
2条回答
  • 2021-02-20 13:26

    Simply check what the OriginalSource is in your KeyDown event handler on the Window:

    private void Window_KeyDown(object sender, KeyEventArgs e) {
        if(e.OriginalSource is TextBox || e.OriginalSource is DateTimePicker) //etc
        {
            e.Handled = true;
            return;
        }
    }
    

    Or if you are using InputBindings, experiment with setting e.Handled = true in either the KeyDown or the PreviewKeyDown event on your Window, rather than the individual controls. In anyway, I think OriginalSource is the key to your answer. (I swear that was not a pun).

    0 讨论(0)
  • 2021-02-20 13:38

    There is an event when you handle KeyDown event and it should pass you a KeyEventArgs. From there you can set the Handled to true so that it won't bubble up.

    Sample

    private void TextBoxEx_KeyAction(object sender, KeyEventArgs e)
    {
      e.Handled = true;
    }
    
    0 讨论(0)
提交回复
热议问题