我正在尝试在Silverlight中根据击键来触发命令。据我所知,你不能在Silverlight中使用AccessKey或AcceleratorKey。另外,看起来附加属性InputBindings也不起作用。
我开始寻找其他地方。看起来棱镜是让命令在Silverlight中工作的方法,所以我检查了一下。然而,它们只有一个Click处理程序,这甚至不是设置关键命令的有用起点。
我是不是遗漏了棱镜的某些部分?或者MVVM Silverlight有没有一个很好的处理热键的标准方法?
发布于 2009-09-29 00:41:27
听起来您正在寻找一种“无代码”的MVVMish方法来处理KeyUp/KeyPress/KeyDown事件。
选项#1: Prism.
您已经提到过,只有在中附带了Click命令。但是,您可以添加自己的附加DPs来启用任何事件的命令(如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有一个很好的视频,它给你一个很好的概述命令和如何创建一个自定义命令附加的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
发布于 2009-09-28 16:31:23
你是说像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
}https://stackoverflow.com/questions/1478094
复制相似问题