Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 了解是否从快捷方式调用了WPF CommandBinding_C#_Wpf - Fatal编程技术网

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>