【问题标题】:How to handle Ctrl + Enter with TextBox when AcceptsReturn is true?当 AcceptsReturn 为真时,如何使用 TextBox 处理 Ctrl + Enter?
【发布时间】:2017-03-14 06:55:44
【问题描述】:

在我的 UWP 应用程序中,我希望我的 TextBox 能够通过按下 Enter 键进入新行,但我还需要在 Ctrl 时触发一个动作kbd>+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;
    }
}

【问题讨论】:

    标签: c# textbox uwp windows-10 uwp-xaml


    【解决方案1】:

    您可以创建一个继承自 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);
            }
        }
    }
    

    【讨论】:

    • 谢谢!这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2013-01-12
    • 1970-01-01
    相关资源
    最近更新 更多