1

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

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

试过:

  • 添加另一个相同的命令CommandBindings(第一次声明似乎赢了)
  • 检查命令是否已经存在...似乎无法找到执行此操作的方法
4

2 回答 2

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>

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

于 2013-06-25T19:44:30.030 回答
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));
    }

希望它可以提供帮助。

于 2013-06-25T21:52:45.140 回答