Горячие клавиши для Silverlight в MVVM?

Я пытаюсь запускать команды на основе нажатий клавиш в Silverlight. Как я понимаю, вы не можете использовать AccessKey или AcceleratorKey в Silverlight. Также похоже, что может быть полезно вложенное свойство InputBindings также не работает.

Я начал искать в других местах. Похоже, Prism был способом заставить команды работать в Silverlight, поэтому я проверил это. Однако у них есть только обработчик Click, который даже не является полезной отправной точкой для получения ключевых команд устанавливать.

Мне просто не хватает какой-то части Prism? Или есть хороший стандартный способ обработки горячих клавиш с MVVM Silverlight?

3 ответов


похоже, вы ищете "кодовый" MVVMish способ обработки события KeyUp/KeyPress/KeyDown.

Вариант #1: Призма.
Вы упомянули об этом только корабли С помощью команды Click. Однако вы можете добавить свой собственный прикрепленный DPs, чтобы включить команды для любого события, которое вы хотите (например, KeyUp/KeyDown/KeyPress).

Если вы ищете образец на этом кори имеет хороший для ToggleButton.Checked Или Unchecked события.
http://www.85turns.com/2009/06/24/togglebutton-command-for-prism/

<ToggleButton x:Name="ToggleButton1" 
            customCommands:Checked.Command="{Binding CheckedCommand}"
            customCommands:UnChecked.Command="{Binding UnCheckedCommand}"
        Margin="8,8,0,8" Content="Check me"
        />

кроме того, Эрик Морк имеет отличное видео, которое дает вам хороший обзор команд и как создать пользовательскую команду, прикрепленную DP. http://development-guides.silverbaylabs.org/Video/Prism-Commands

Опция #2: Blend Triggers
Выражение Blend SDK поставляется с триггерами и поведением, которые находятся на что ты пытаешься это сделать.
Смесь Примеры проект codeplex поставляется с EventTrigger вы можете использовать:

<i:EventTrigger EventName="Click">
      <si:InvokeDataCommand Command="{Binding ShoppingCart.CheckOutCommand}"/>
</i:EventTrigger>

или вы можете создать свой собственный триггер для ключевых событий хода и делать там все, что хотите. Вот ... sample:
http://azurecoding.net/blogs/brownie/archive/2009/04/06/blend-behaviors-ftw.aspx


вы имеете в виду Ctrl+v или такие Я видел следующий пример в сайт MSDN.

void Canvas_KeyUp(object sender, KeyEventArgs e)
{
    //check for the specific 'v' key, then check modifiers
    if (e.Key==Key.V) { 
        if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) {
        //specific Ctrl+V action here
        }
    } // else ignore the keystroke
}

на набор инструментов в MVVM содержит интересные CommandReference класс, который позволяет привязывать InputBindings к командам ViewModel. Я не уверен, что это работает для Silverlight, но вы можете попробовать...

OK, как указал RandomEngy, в Silverlight нет InputBindings...

тем не менее, я думаю, вы можете использовать прикрепленное поведение. Это способ "привязать" событие к команде ViewModel. Марлон грех имеет хорошая реализация вот!--4-->