MVVM中的Silverlight热键命令?
我正在尝试基于Silverlight中的击键来触发命令。 据我了解,您无法在Silverlight中使用AccessKey或AcceleratorKey。 它看起来可能是有用的附加属性InputBindings也不起作用。
我开始在其他地方寻找。 看起来Prism是让Silverlight中的命令工作的方式,所以我检查了一下。 但是它们只有一个Click处理程序,它甚至不是设置关键命令的有用起点。
我只是错过了Prism的某些部分吗? 或者有一个很好的标准方法来处理MVVM Silverlight的热键?
听起来你正在寻找处理KeyUp / KeyPress / KeyDown事件的“无代码”MVVMish方式。
选项#1:棱镜。
您已经提到它只随附 Click命令。 但是,您可以添加自己的附加DP,以便为您喜欢的任何事件启用命令(如KeyUp / KeyDown / KeyPress)。
如果你正在寻找一个样本,那么Corey有一个很好的ToggleButton.Checked / Unchecked事件。
http://www.85turns.com/2009/06/24/togglebutton-command-for-prism/
此外,Erik Mork还有一个出色的video,可以让您对命令以及如何创建自定义命令Attached DP有一个很好的概述。 http://development-guides.silverbaylabs.org/Video/Prism-Commands
选项#2:混合触发器
Expression Blend SDK附带了触发器和行为,这些触发器和行为可以指向您尝试执行的操作。
Blend示例 codeplex项目随附一个您可以使用的EventTrigger:
或者,您可以为按键描边事件创建自己的自定义触发器,并根据您的喜好进行操作。 这是一个示例:
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,但你可以尝试一下……
好的,正如RandomEngy指出的那样,Silverlight中没有InputBindings ……
但是,我认为你可以使用附加的行为。 这是一种将事件“绑定”到ViewModel命令的方法。 Marlon Grech 在这里有很好的实施
- 如何使用PostSharp实现延迟加载?
- 在Sql Server连接字符串中使用Encrypt = yes – >“provider:SSL Provider,error:0 – 证书的CN名称与传递的值不匹配。”
- CommonOpenFileDialog导致Windows窗体缩小
- 在MVC cshtml中每行显示三列
- C#UserControl.VerticalScroll.Value未设置
- C#3中的自动属性 - 如果我为set声明一个,必须声明一个get的主体吗?
- 如何在.NET中创建虚拟网络适配器?
- System.Security.Cryptography.CryptographicException:keyset不存在
- .NET(或MFC)的高速图形控制?