我从已经处理ApplicationCommands.Close
命令的窗口控件继承,以便它处理本机关闭窗口。
我想添加/覆盖现有功能,但我似乎无法弄清楚如何做到这一点。
试过:
- 添加另一个相同的命令
CommandBindings
(第一次声明似乎赢了) - 检查命令是否已经存在...似乎无法找到执行此操作的方法
您可以尝试几件事。如果您只是想阻止您的窗口关闭,您可以覆盖该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>
预览路由事件将在标准事件之前发生,允许您在基类之前处理逻辑。
如果你想替换全局命令的功能,你可以找到特定的命令绑定,删除它然后添加你自己的逻辑。见下文。
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));
}
希望它可以提供帮助。