网格.Focus、TextBox和Delete键交互



我有以下代码(默认情况下会聚焦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;
}
}
}

最新更新