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