Как активировать команду нажатия кнопки при нажатии клавиши Enter? - PullRequest
2 голосов
/ 10 ноября 2011

Я занимаюсь разработкой приложения с использованием SL Prism и MEF с использованием MVVM.

У меня есть страница входа в систему, которая в настоящее время содержит текстовое поле имени пользователя и пароля и одну кнопку входа.Код для моей кнопки следующий:

<Button x:Name="signInButton" Content="Sign In" cal:Click.Command="{Binding loginCommand}"/>

Я борюсь с тем, чтобы подключить текстовое поле так, чтобы, если пользователь нажал, введите loginCommand.Я много гуглил и не могу найти ответов, которые бы справились с MVVM.

Я попытался добавить обработчик событий KeyDown в панель стека, в которой находятся элементы управления.Однако из кода, который я могу сделать, единственное, чего я могу добиться, это установить фокус на кнопку.

private void StackPanel_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        this.signInButton.Focus();
        e.Handled = true;
    } 
}

Как мне достичь цели нажатия клавиши ввода, вызывающей выполнение loginCommand?

Большое спасибо Джеймс

Ответы [ 4 ]

3 голосов
/ 10 ноября 2011

Используйте классы Automation Peer , чтобы нажать его.Затем он будет работать с MVVM ICommand, подобной той, что у вас есть:

ButtonAutomationPeer peer =
  new ButtonAutomationPeer( someButton );

IInvokeProvider invokeProv =
  peer.GetPattern( PatternInterface.Invoke )
  as IInvokeProvider;

invokeProv.Invoke();
0 голосов
/ 11 ноября 2011

Попробуйте добавить триггер на событие KeyDown с параметром (DependencyProperty) - командой, которая должна быть вызвана.Если ключ Key.Enter, просто вызовите команду.

0 голосов
/ 11 ноября 2011

Вы можете добавить связывание клавиш в xaml для определенных команд, таких как:

 <Button Command="{Binding TestCommand}" Content="Test">
        <Button.InputBindings>
            <KeyBinding Command="{Binding TestCommand}" Key="F2" />
        </Button.InputBindings>
    </Button>

Таким образом связывание клавиш работает, если ваша кнопка сфокусирована.Если вы хотите, чтобы связывание клавиш было доступно в большем объеме, вы можете добавить связывание клавиш, например, в Window (Window.KeyBindings) или любой другой элемент.

0 голосов
/ 10 ноября 2011

Можете ли вы просто вызвать метод click?Например, внутри вашего захвата кнопки Enter, где "this.signInButton.Focus ();"есть, поставить "signInButton_Click (null, null);"запустить метод нажатия кнопки напрямую.

...