我正在努力将一些快捷键绑定到我的WPF按钮。这些按钮是使用以下代码动态构建的[只是一个片段 - 但应该足够]:
// for each command defined in the database
...
PosCommand cmd = null; // FYI: PosCommand implements ICommand
if (!string.IsNullOrEmpty(group.AssemblyPath))
{
if (System.IO.File.Exists(group.AssemblyPath))
cmd = (PosCommand)Activator.CreateInstance(Assembly.LoadFile(group.AssemblyPath).GetType(group.FullQualifiedName), model);
}
else
{
cmd = (PosCommand)Activator.CreateInstance(Assembly.GetExecutingAssembly().GetType(group.FullQualifiedName), model);
}
if (cmd == null)
continue;
Function function = new Function()
{
Command = cmd,
Name = group.FunctionName,
Description = group.Description,
FunctionCode = group.FunctionCode
};
...
这是XAML的一个片段,它绑定到C#代码:
<itemscontrol x:name="functionList" grid.row="0" itemssource="{Binding GroupFunctions}" xmlns:x="#unknown">
<itemscontrol.itemtemplate>
<datatemplate>
<groupbox header="{Binding Group}">
<itemscontrol scrollviewer.horizontalscrollbarvisibility="Disabled" itemssource="{Binding Functions}">
<itemscontrol.itemspanel>
<itemspaneltemplate>
<wrappanel />
</itemspaneltemplate>
</itemscontrol.itemspanel>
<itemscontrol.itemtemplate>
<datatemplate>
<Button MinWidth="91" Height="50" Content="{Binding Name}" ToolTip="{Binding Description}" Command="{Binding Command}"/>
</datatemplate>
</itemscontrol.itemtemplate>
</itemscontrol>
</groupbox>
</datatemplate>
</itemscontrol.itemtemplate>
</itemscontrol>
我尝试在按钮上添加一些键绑定但没有成功?!我修改了Function类,使其包含每个按钮的Modifier和Key的属性。它仍然不想工作,即使我硬编码Modifier和Key值
<Button.InputBindings>
<keybinding modifiers="{Binding Mod}" key="{MyKey}" />
</Button.InputBindings>
有人可以帮我解决这个问题吗? 非常感谢提前!
亲切的问候,
答案 0 :(得分:1)
我建议将System.Windows.Interactivity
与自定义触发器一起使用。我有一个example here on my blog,为Caliburn Micro MVVM框架完成,但我认为它是一个跨框架解决方案。 System.Windows.Interactivity.dll
是Blend的一部分,但它可以二进制形式重新发布,它不需要任何特殊设置,只需一次xcopy部署即可。
答案 1 :(得分:0)
在一天结束时,我写了自己的关键听众。我处理了KeyEventHandler
:
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
this.AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)HandleKeyDownEvent);
}
private void HandleKeyDownEvent(object sender, KeyEventArgs e)
{
}
基本上,所有ICommands都是在数据库中定义的,并且是动态构建的。因此,我利用CommandProperty来添加复杂的数据类型。在这种复杂的数据类型中,我存储了各种信息,包括要使用的快捷键。因此,密钥监听器等待密钥组合,查找并执行ICommand。
亲切的问候,