C# 了解是否从快捷方式调用了WPF CommandBinding
在回调方法中,我想知道命令绑定是如何触发的。最重要的是,我必须找出是否是键盘快捷键触发了该命令,而不是正在使用的按钮或菜单项 这是我的回调方法:C# 了解是否从快捷方式调用了WPF CommandBinding,c#,wpf,C#,Wpf,在回调方法中,我想知道命令绑定是如何触发的。最重要的是,我必须找出是否是键盘快捷键触发了该命令,而不是正在使用的按钮或菜单项 这是我的回调方法: private void AddObjectCommand_Executed(object sender, ExecutedRoutedEventArgs e) { yap.AddObject(false); } 我假设我可以使用object参数,但传递的始终是视图(窗口),而不是按钮或菜单项 我需要这个,因为命令应该向我的屏幕添加一个新对象。如
private void AddObjectCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
yap.AddObject(false);
}
我假设我可以使用object参数,但传递的始终是视图(窗口),而不是按钮或菜单项
我需要这个,因为命令应该向我的屏幕添加一个新对象。如果使用键盘快捷键,我想在鼠标位置添加对象。如果单击菜单快捷方式,这(显然)不是一个好主意。对象应添加到屏幕中间
我可以创建两个不同的命令,但只使用一个,快捷方式也会显示在菜单中,这是更好的选择
在回调方法中,我想知道命令绑定是如何触发的
恐怕此信息没有传递给事件处理程序。如果要区分键盘快捷键和其他类型的调用,实际上应该使用两个不同的命令
他们可能会做同样的事情,比如调用相同的方法。但是无法从
已执行的事件处理程序中判断命令是如何执行的。您可以在命令参数中传递一些值以识别调用方,然后使用已执行的路由EventArgse来获取该值
public static class Commands
{
public static readonly RoutedCommand testcommand = new RoutedCommand();
}
private void MyCmd_Executed(object sender, ExecutedRoutedEventArgs e)
{
string parameter = (string)e.Parameter;
MessageBox.Show(parameter);
}
XAML
如果将回调更改为在viewmodel中使用ICommand(RelayCommand),则可以使用CommandParameter PropertyTank you!这是正确的。它也可以在没有x:Static的情况下工作,所以我不确定当您只需编写Command=“local:Commands.testcommand”时为什么需要添加它
<Window.CommandBindings>
<CommandBinding
Command="{x:Static local:Commands.testcommand}"
Executed="MyCmd_Executed"
/>
</Window.CommandBindings>
<Window.InputBindings>
<KeyBinding Command="{x:Static local:Commands.testcommand}"
CommandParameter="From key Binding"
Key="H" Modifiers="Alt"/>
</Window.InputBindings>
<Grid>
<Menu>
<MenuItem Header="My Command"
Command="{x:Static local:Commands.testcommand}"
CommandParameter="From bmenuitem"/>
</Menu>