UWP:如何在文本框

时间:2016-04-16 00:29:30

标签: win-universal-app

我的应用中有一个文本框。在这个应用程序中,我正在创建自己的撤消/重做功能,因为我的文本框中的文本代表了更大的内存,我需要跟踪这些文本框更改,以便能够正确撤消/重做整个项目。

作为其中的一部分,我需要自己捕获 - 并处理 - 许多常见的键盘场景。是的,我知道这会很痛苦。

目前我的主要障碍是文本框截取(甚至隐藏)“常用”键,例如 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;
        }
    }

我真的很感激在正确的方向上轻推。

0 个答案:

没有答案