我有以下代码(默认情况下会聚焦TextBox
(:
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (Keyboard.IsKeyDown(Key.LeftCtrl))
{
if (Keyboard.IsKeyDown(Key.S))
{
grid.Focus();
ModifyPart(sender, e);
}
if (Keyboard.IsKeyDown(Key.Delete))
{
grid.Focus();
DeletePart(sender, e);
}
}
}
Ctrl+S组合触发,但Ctrl+Delete不会。相反,它会删除TextBox
的内容(默认情况下,我会以编程方式突出显示它(。我用Enter
替换了Delete
,它起作用了,所以我想Delete
密钥比其他密钥有更高的优先级。
如果我将grid.Focus();
移出并高于if (Keyboard.IsKeyDown(Key.Delete))
方法,那么它是有效的,但我失去了Ctrl+C, Ctrl+V, Ctrl+P
等的功能,因为我正在从TextBox
中移除焦点。
知道如何覆盖Delete
优先级吗?
基于@ASh和@Soleil-Mathieu Prévot的答案。
XAML:
PreviewKeyDown="Window_PreviewKeyDown">
CS:
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Escape)
{
this.Close();
}
if (Keyboard.IsKeyDown(Key.LeftCtrl))
{
if (Keyboard.IsKeyDown(Key.S))
{
ModifyPart(sender, e);
e.Handled = true;
}
if (Keyboard.IsKeyDown(Key.Delete))
{
DeletePart(sender, e);
e.Handled = true;
}
}
}