当 AcceptsReturn 为 true 时,如何使用 TextBox 处理 Ctrl + Enter?

Jes*_*ica 3 c# textbox windows-10 uwp uwp-xaml

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

问题是,当我按下+时,我似乎找不到防止文本转到下一行的方法。这是我尝试过的代码。CtrlEnter

XAML

<TextBox x:Name="TextBox1" AcceptsReturn="True" />
Run Code Online (Sandbox Code Playgroud)

在构造函数中

TextBox1.AddHandler(KeyDownEvent, new KeyEventHandler(TextBox1_KeyDown), true);
Run Code Online (Sandbox Code Playgroud)

处理程序

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ský 5

您可以创建一个自定义类,该类继承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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)