Многострочное текстовое поле со скайпом - PullRequest
0 голосов
/ 17 августа 2011

Я пытался получить текстовое поле, которое создает новую строку при нажатии Shift+Enter, и мы можем получить события нажатия клавиш при нажатии Enter на бэкэнде KeyDown Событие Хочу заметить, что если нажата Enter, что-то сделать.

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

это прекрасно работает для одной строки. Поскольку я нажимаю AcceptReturn = true и textwrapping до wrap, затем при нажатии Enter новая строка добавляется в текстовое поле, но event does not fire up.

я хочу, чтобы новая строка произошла в Shift+Enter

и Enter событие должно сработать. есть идеи?

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Я думаю, что вам, вероятно, нужно обработать событие PreviewKeyDown . Поймайте комбинацию нажатий клавиш, которую вы хотите обработать, обработайте ее, затем установите e.Handled = true, чтобы убедиться, что она не обрабатывается где-либо еще как событие нажатия клавиш туннели и пузыри .

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.

0 голосов
/ 17 августа 2011

Попробуйте следующее для события KeyDown, оно должно работать с многострочным текстовым полем ванили, больше ничего не нужно:

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

            // Fire my custom event
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...