我正在尝试根据 Silverlight 中的击键触发命令。据我了解,您不能在 Silverlight 中使用 AccessKey 或 AcceleratorKey。此外,看起来可能有用的附加属性 InputBindings 也不起作用。
我开始在其他地方寻找。看起来 Prism 是让命令在 Silverlight 中工作的方式,所以我检查了一下。然而,它们只有一个 Click 处理程序,这甚至不是设置键盘命令的有用起点。
我只是错过了 Prism 的某些部分吗?或者是否有使用 MVVM Silverlight 处理热键的良好标准方法?
最佳答案
听起来您正在寻找一种“无代码”的 MVVMish 方式来处理 KeyUp/KeyPress/KeyDown 事件。
选项 #1: Prism 。
您已经提到它只附带 Click 命令。但是,您可以添加自己的附加 DP,以便为您想要的任何事件启用命令(如 KeyUp/KeyDown/KeyPress)。
如果您正在寻找关于 Corey 的示例,那么 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
关于c# - MVVM 中 Silverlight 的热键命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1478094/