我的程序很大,并且使用WPF,我想要一个使用'R'的全局快捷键,没有修饰符。
有许多控件,如TextBox,ListBox,ComboBox等都在控件内部使用字母,这很好 - 这对我来说是正确的。
但是 - 我希望将KeyDown事件保持在冒泡到主窗口,例如,只要用户在TextBox中键入字母“R”,它就会触发快捷方式。 />
理想情况下,我希望能够做到这一点,而无需指定(并执行if-then逻辑)每个可能接收正常按字母键的控件的实例/类型(不仅仅是TextBox控件,尽管他们是最严重的违规者) )。
答案 0 :(得分:9)
只需检查窗口上OriginalSource
事件处理程序中KeyDown
的内容:
private void Window_KeyDown(object sender, KeyEventArgs e) {
if(e.OriginalSource is TextBox || e.OriginalSource is DateTimePicker) //etc
{
e.Handled = true;
return;
}
}
或者,如果您正在使用InputBindings,请尝试在窗口的e.Handled = true
或KeyDown
事件中设置PreviewKeyDown
,而不是单个控件。无论如何,我认为OriginalSource
是你答案的关键。 (我发誓这不是双关语)。
答案 1 :(得分:0)
处理KeyDown
事件时会发生一个事件,它会通过KeyEventArgs
。从那里,您可以将Handled
设置为 true ,以便它不会冒出来。
样品
private void TextBoxEx_KeyAction(object sender, KeyEventArgs e)
{
e.Handled = true;
}