我的应用中有一个文本框。在这个应用程序中,我正在创建自己的撤消/重做功能,因为我的文本框中的文本代表了更大的内存,我需要跟踪这些文本框更改,以便能够正确撤消/重做整个项目。
作为其中的一部分,我需要自己捕获 - 并处理 - 许多常见的键盘场景。是的,我知道这会很痛苦。
目前我的主要障碍是文本框截取(甚至隐藏)“常用”键,例如 Ctrl + X , Ctrl < / kbd> + V , Ctrl + Z 和 Ctrl + Y 。它这样做是为了它可以实现自己的undo-redo,但我不需要内置的undo / redo东西。我想在我的UWP应用程序中完全禁用这些键。
我知道你可以在winforms中做到这一点,但UWP似乎是一个不同的野兽。
private async void MyTextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down);
// Handle special keys!!
if (ctrl && e.Key == Windows.System.VirtualKey.F)
{
Find_Click(null, null);
e.Handled = true;
}
else if (ctrl && e.Key == Windows.System.VirtualKey.R)
{
Replace_Click(null, null);
e.Handled = true;
}
...
else if (ctrl && e.Key == Windows.System.VirtualKey.Z)
{
// THIS DOES NOT FIRE
Undo();
e.Handled = true;
}
else if (ctrl && e.Key == Windows.System.VirtualKey.Y)
{
// THIS DOES NOT FIRE
Redo();
e.Handled = true;
}
else if (ctrl && e.Key == Windows.System.VirtualKey.X)
{
// THIS DOES NOT FIRE
CaptureUndo("");
e.Handled = true;
}
else if (ctrl && e.Key == Windows.System.VirtualKey.V)
{
// THIS FIRES, BUT THE PASTE HAS ALREADY HAPPENED
// SO e.Handled IS USELESS
string s=GetClipboardText();
CaptureUndo(s);
e.Handled = true;
}
}
我真的很感激在正确的方向上轻推。