Нажатие Enter на TextBox в Silverlight

Я работаю над приложением silverlight, которое вам нужно ввести в текстовое поле, а затем просто нажмите enter. Ну, нет события onclick, которое я мог бы найти, поэтому я сделал это с помощью события onkeypressup и проверял, был ли он нажатием клавиши ввода, если это так "бла".

Просто кажется, что есть лучший способ сделать это. Итак, вопрос в том, есть ли?

Ответ 1

Я думаю, что способ поймать Key.Enter.

Кроме того, код будет более читабельным, если вы используете событие KeyDown вместо события KeyUp.

Если вы заботитесь только о том, чтобы поймать Key.Enter для одного элемента управления, ваш подход будет правильным.

Вы также можете поймать Key.Enter для группы связанных элементов управления, используя событие KeyDown своего контейнера ( "Event Bubbling" ).

Ответ 2

Вы действительно хотите это в текстовом поле? Я бы поставил обработчик onkeyup на контейнер (например, Grid, Canvas), чтобы нажать кнопку в любом месте формы.

Ответ 3

Это будет работать, если вы хотите привязать свойство Command вместо использования события Click. Начните с создания обработчика событий для Click (см. Ниже), а затем в KeyUp do:

    private void MyTextBox_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter) SomeButton_Click(this, null);

    }

    private void SomeButton_Click(object sender, RoutedEventArgs e)
    {
        ICommand cmd = SomeButton.Command;
        if (cmd.CanExecute(null))
        {
            cmd.Execute(null);
        }
    }

Ответ 4

Я использую следующую реализацию при использовании шаблона команды:

private void MyTextBox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        BindingExpression b = MyTextBox.GetBindingExpression(TextBox.TextProperty); 
        if (b != null)
            b.UpdateSource();

        ICommand cmd = SomeButton.Command;
        if (cmd.CanExecute(null))
            cmd.Execute(null);
    }
}

Когда вы нажмете Enter, источник данных текстового поля не будет обновлен, а команда будет использовать старое значение. Поэтому перед выполнением команды необходимо вызвать UpdateSource.

Конечно, вы можете поймать событие на более высоком уровне, чем текстовое поле.

Ответ 5

Ну, я preaty новый для Silverlight, и я создал HitEnter beahaviour для кнопки, у которой есть одна кнопка DependencyProperty.

И я manulay подключаю кнопку и поведение (в коде позади), а затем, когда вводится хит, я inovke команды на кнопку.