Нажатие Enter на TextBox в Silverlight - PullRequest
10 голосов
/ 23 ноября 2008

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

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

Ответы [ 5 ]

12 голосов
/ 24 ноября 2008

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

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

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

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

6 голосов
/ 24 ноября 2008

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

5 голосов
/ 12 июля 2011

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

    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);
        }
    }
1 голос
/ 05 июня 2012

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

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 перед выполнением команды.

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

0 голосов
/ 17 марта 2011

Что ж, я новичок в Silverlight, и я создал поведение HitEnter для кнопки с одной кнопкой DependencyProperty.

И я вручную подключаю кнопку и поведение (в коде позади), а затем, когда ввод нажат, я делаю команду на кнопке.

...