C# 如何处理Ctrl+;当AcceptsReturn为真时,使用文本框输入?

C# 如何处理Ctrl+;当AcceptsReturn为真时,使用文本框输入?,c#,textbox,uwp,windows-10,uwp-xaml,C#,Textbox,Uwp,Windows 10,Uwp Xaml,在我的UWP应用程序中,我希望我的文本框能够通过按下Enter键转到新行,但我还需要在按下Ctrl+Enter时触发一个操作 问题是,当我按下Ctrl+Enter键时,我似乎找不到阻止文本转到下一行的方法。这是我尝试过的代码 XAML <TextBox x:Name="TextBox1" AcceptsReturn="True" /> 处理程序 TextBox1.AddHandler(KeyDownEvent, new KeyEventHandler(TextBox1_KeyDow

在我的UWP应用程序中,我希望我的
文本框
能够通过按下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);
        }
    }
}

非常感谢。这正是我想要的。