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, ComboBox, etc. that all use letters inside the control itself, which is fine - that's correct for me.
But - I want to keep that KeyDown event from bubbling up to the main window, where it would trigger the shortcut any time a user is typing the letter 'R' in a TextBox, for example.
Ideally, I would like to be able to do this without having to specify (and do if-then logic on) every instance/type of control that might receive normal alphabetical key presses (not just the TextBox controls, though they are the worst offenders).
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).
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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With