Мне нужно предоставить сочетание клавиш доступа для нескольких функций, таких как Сохранить. Для этого я начал с обработки события KeyUp моего корневого объекта, который представляет собой Grid с именем LayoutRoot (обычно создается по умолчанию в пользовательском элементе управления Silverlight или странице).
Я использую шаблон MVVM, но для этого я добавил код в коде как таковой (это взаимодействие с пользовательским интерфейсом, поэтому оно выглядит нормально):
private void LayoutRoot_KeyUp(object sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.S:
if ((Keyboard.Modifiers & ModifierKeys.Windows) == ModifierKeys.Windows)
{
e.Handled = true;
// save
}
break;
case Key.C:
if ((Keyboard.Modifiers & ModifierKeys.Windows) == ModifierKeys.Windows)
{
e.Handled = true;
// clear fields
}
break;
}
}
Я использовал ключ Windows, потому что в браузере нет ярлыков, которые используют его, насколько мне известно.
Я реализую функцию Сохранить на кнопке Сохранить, используя команду, поэтому поддерживаю шаблон MVVM. Э.Г.
public RelayCommand CommandSavePtr { get; private set; }
CommandSavePtr = new RelayCommand(OnSavePtr);
private void OnSavePtr()
{
....
В XAML: -
<Button x:Name="SavePtrButton"
Command="{Binding CommandSavePtr}"
Style="{StaticResource StandardButtonStyle}"
IsEnabled="{Binding Ptr.HasErrors, Converter={StaticResource NotOperatorValueConverter}}">
<StackPanel Orientation="Horizontal">
<Image Source="/G4SPrisonerEscorting_ResourceDictionaries;component/images/accept.png" Style="{StaticResource SubPanelIconStyle}"/>
<TextBlock Text="Save"/>
</StackPanel>
</Button>
Моя проблема сейчас заключается в том, что я не знаю, как связаться с ViewModel из моего вышеупомянутого события KeyUp, чтобы выполнить ту же функцию сохранения, которая выполняется при нажатии кнопки Сохранить.
Может ли кто-нибудь направить меня в правильном направлении.
Кстати, я использую GalaSoft MVVM Light для командования.