其他分享
首页 > 其他分享> > CodeGo.net>当AcceptsReturn为true时,如何使用文本框处理Ctrl Enter?

CodeGo.net>当AcceptsReturn为true时,如何使用文本框处理Ctrl Enter?

作者:互联网

在我的UWP应用程序中,我希望我的TextBox能够通过按下Enter键转到新行,但是当按下Ctrl Enter时,我还需要触发一个动作.

问题是,当我按下Ctrl Enter时,似乎无法找到一种方法来防止文本转到下一行.这是我尝试过的代码.

XAML

<TextBox x:Name="TextBox1" AcceptsReturn="True" />

在构造函数中

TextBox1.AddHandler(KeyDownEvent, new KeyEventHandler(TextBox1_KeyDown), true);

处理程序

private void TextBox1_KeyDown(object sender, KeyRoutedEventArgs e)
{
    var ctrl = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control);
    if (ctrl.HasFlag(CoreVirtualKeyStates.Down) && e.Key == VirtualKey.Enter)
    {
        e.Handled = true;
    }
}

解决方法:

您可以创建一个继承自TextBox的自定义类,并重写其OnKeyDown方法,在此您可以完全控制触发base.OnKeyDown方法,以防止添加新行.

class CTRLEnterTextBox : TextBox
{
    protected override void OnKeyDown(KeyRoutedEventArgs e)
    {
        if (Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down) && e.Key == VirtualKey.Enter)
        {
            e.Handled = true;
        }
        else
        {
            base.OnKeyDown(e);
        }
    }
}

标签:uwp-xaml,uwp,windows-10,textbox,c
来源: https://codeday.me/bug/20191026/1934354.html