带有类似功能的skype的多行文本框

时间:2011-08-17 09:07:36

标签: c# wpf-controls

我试图在按下Shift+Enter时创建一个创建新行的文本框,我们可以在按下Enter时获取关键字事件 在KeyDown事件的后端我要注意,如果按下Enter,则执行某些操作。

if (e.Key.Equals(Key.RightShift))
            {
}

这适用于单行。只要我点击AcceptReturn = truetextwrappingwrap,然后按Enter新行添加到文本框但event does not fire up. 1}}

我希望新行发生在Shift+Enter

并且Enter事件应该触发。 任何想法?

2 个答案:

答案 0 :(得分:2)

我认为您可能需要处理 PreviewKeyDown 事件。抓住你想要处理的按键组合,处理它,然后设置e.Handled = true以确保它不会被作为按键事件tunnels & bubbles在其他任何地方处理。

<强> XAML:

<TextBox TextWrapping="Wrap" AcceptsReturn="True"
    PreviewKeyDown="TextBox_PreviewKeyDown" />

<强>代码隐藏:

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyboardDevice.Modifiers == ModifierKeys.None && e.Key == Key.Enter)
    {
        e.Handled = true;

        // Do your special enter handling here...
    }

    // Shift+Enter (and any other keys) will be handled as normally...
    // ...you'll still get your new line on Shift+Enter
}

注意:如果您希望Enter键仍然添加新行以及作为特殊处理,则只需删除e.Handled = true行。

答案 1 :(得分:0)

在KeyDown事件上尝试以下操作,应该使用vanilla多行文本框,不需要任何进一步的操作:

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (!e.Shift && e.KeyValue == (int)Keys.Enter)
        {
            e.SuppressKeyPress = true;

            // Fire my custom event
        }
    }