Горячие клавиши для 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-->