我正在尝试基于Silverlight中的击键来触发命令。据我了解,您无法在Silverlight中使用AccessKey或AcceleratorKey。它看起来可能是有用的附加属性InputBindings也不起作用。
我开始在其他地方寻找。看起来Prism是让Silverlight中的命令工作的方式,所以我检查了一下。但是它们只有一个Click处理程序,它甚至不是设置关键命令的有用起点。
我是否只是错过了Prism的某些部分?或者有一个很好的标准方法来处理MVVM Silverlight的热键吗?
答案 0 :(得分:9)
听起来你正在寻找一种处理KeyUp / KeyPress / KeyDown事件的“无代码”MVVM方式。
选项#1:棱镜。
您已使用Click命令仅提及发货。但是,您可以添加自己的附加DP,以便为您喜欢的任何事件启用命令(如KeyUp / KeyDown / KeyPress)。
如果你正在寻找一个样本,那么Corey有一个很好的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"
/>
此外,Erik Mork有一个出色的视频,可以让您对命令以及如何创建自定义命令Attached DP有一个很好的概述。 http://development-guides.silverbaylabs.org/Video/Prism-Commands
选项#2:混合触发器
Expression Blend SDK附带了触发器和行为,这些触发器和行为是您尝试做的事情
Blend Examples codeplex项目附带了一个可以使用的EventTrigger:
<i:EventTrigger EventName="Click">
<si:InvokeDataCommand Command="{Binding ShoppingCart.CheckOutCommand}"/>
</i:EventTrigger>
或者,你可以为按键击中事件创建自己的自定义触发器,并按照你的意愿做任何事情。这是一个例子:
http://azurecoding.net/blogs/brownie/archive/2009/04/06/blend-behaviors-ftw.aspx
答案 1 :(得分:0)
你的意思是Ctrl + v等 我在MSDN site看到了以下示例。
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
}
答案 2 :(得分:0)
MVVM toolkit包含一个有趣的 CommandReference
类,允许您将InputBindings绑定到ViewModel命令。我不确定它适用于Silverlight,但你可以尝试一下......
好的,正如RandomEngy指出的那样,Silverlight中没有InputBinding ...
但是,我认为你可以使用附加行为。这是一种将事件“绑定”到ViewModel命令的方法。 Marlon Grech有a good implementation here