Сочетания клавиш доступа Silverlight - PullRequest
0 голосов
/ 14 марта 2011

Мне нужно предоставить сочетание клавиш доступа для нескольких функций, таких как Сохранить. Для этого я начал с обработки события 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 для командования.

1 Ответ

1 голос
/ 23 января 2012

Это старый вопрос, но я подумал, что в любом случае отвечу на него, если кто-то еще наткнется на ту же проблему.

Должна быть возможность запустить команду для кнопки в коде вследующим образом:

SavePtrButton.Command.Execute(SavePtrButton.CommandParameter);
...