在UWP中没有为TextBox触发KeyDown事件

时间:2016-04-29 12:32:07

标签: uwp textbox win-universal-app

当我按下Enter键时,如果KeyDown属性设置为true,则不会触发TextBox的{​​{1}}事件。如何在AcceptsReturn设置为TextBox AcceptsReturn时确定何时按下Enter键?

4 个答案:

答案 0 :(得分:4)

如果您希望完全禁用新行(如@ruffin想要的那样),请通过后面的代码订阅PreviewKeyDown事件,并将e.Handled设置为true

    public MyControl()
    {
        InitializeComponent();

        var keyeventHandler = new KeyEventHandler(TextBox_KeyDown);
        uiText.AddHandler(PreviewKeyDownEvent, keyeventHandler, handledEventsToo: true);
    }

    private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Enter)
            e.Handled = true;
    }

答案 1 :(得分:3)

我尝试了下面的代码,它适用于我,

var textBox = new TextBox();
KeyEventHandler keyeventHandler = new KeyEventHandler(textBox_KeyDown);

textBox.AddHandler(TextBox.KeyDownEvent, keyeventHandler, true);

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
*** now Enter Key gets fired eventhough when i set AcceptsReturn as True ***
}

答案 2 :(得分:1)

  

当我按下回车键时,不会触发文本框的按键事件。仅当我将文本框的接受返回属性设置为true时才会发生这种情况。

这是因为如果AcceptsReturn设置为true,则TextBox允许换行符,因此当您按Enter键时,它将开始一个新行,并且KeyDown事件不会被取消被辞退了。另外,如果将其设置为false(默认情况下为false),当您按Enter键时,它会使此TextBox处于输入焦点状态,KeyDown事件可能会被触发。

  

如何确定何时按下Enter键?

我担心您无法在此方案中使用KeyDown事件来识别Enter键,但您可以在后面的代码中使用TextBox.TextChanged event来获得通知,因为它会在输入时开始新行键是按下的。

答案 3 :(得分:0)

在XAML中

<TextBox VerticalAlignment="Top" KeyDown="TextBox_KeyDown"/>
代码背后的

private void TextBox_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        Debug.WriteLine(e.Key);
    }

从输出中,您可以看到Enter已被识别。