如何向命令添加其他操作

时间:2013-06-25 19:21:30

标签: c# .net wpf .net-4.0 command

我从一个已经处理ApplicationCommands.Close命令的窗口控件继承,以便它本地处理关闭窗口。

我想添加/覆盖现有功能,但我似乎无法弄清楚如何做到这一点。

尝试:

  • CommandBindings添加另一个相同的命令(首先声明似乎赢了)
  • 检查命令是否已存在......似乎找不到办法

2 个答案:

答案 0 :(得分:1)

您可以尝试一些事情。如果您只是想阻止窗口关闭,可以覆盖OnClosing方法并设置已取消的标记:

protected override void OnClosing(CancelEventArgs e)
{
    e.Cancel = true;
    base.OnClosing(e);
}

如果要专门更改行为,可以注册命令的预览版本:

<Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Close"
                    PreviewExecuted="CloseCommandHandler"
                    PreviewCanExecute="CanExecuteHandler" />
</Window.CommandBindings>

预览路由事件将在标准事件之前发生,允许您在基类之前处理逻辑。

答案 1 :(得分:0)

如果要替换全局命令的功能,可以找到特定的命令绑定,删除它然后添加自己的逻辑。见下文。

    public ChildWindow()
        :base()
    {
        var appCloseCommandBinding =
            CommandBindings.Cast<CommandBinding>().SingleOrDefault(item => item.Command == ApplicationCommands.Close);

        if(appCloseCommandBinding != null)
            CommandBindings.Remove(appCloseCommandBinding);

        CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, YourCommandLogic));
    }

希望它可以提供帮助。