【发布时间】:2020-11-13 11:49:49
【问题描述】:
有什么方法可以在 MVVM 方式中覆盖应用程序的 X(红十字)按钮?
我希望该按钮隐藏托盘中的窗口(我已经配置了托盘图标),但不知道如何以正确的方式隐藏窗口。
【问题讨论】:
-
您可以使用
WindowChrome自定义您的窗口,并将任何命令绑定到关闭按钮,而不会违反任何 MVVM 规则
有什么方法可以在 MVVM 方式中覆盖应用程序的 X(红十字)按钮?
我希望该按钮隐藏托盘中的窗口(我已经配置了托盘图标),但不知道如何以正确的方式隐藏窗口。
【问题讨论】:
WindowChrome 自定义您的窗口,并将任何命令绑定到关闭按钮,而不会违反任何 MVVM 规则
您需要重写OnClosing() 方法。
这是我的MainWindow 代码,您可以将它放在主窗口的任何位置。
protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = true;
Hide();
base.OnClosing(e);
}
e.Cancel = true 在这里是相关的,因为将 Cancel 设置为 true 会取消关闭请求,因此应用程序实际上并没有关闭。
我刚刚注意到您的帖子说 in MVVM way,我假设您的意思是在您的 View Model? 中编写代码?如果是这种情况,MVVM 模式并不要求您在代码隐藏中编写零代码。 MVVM 的想法是将View、Model 和ViewModel 解耦,但在必要时仍然允许您使用这样的代码。可以这么说,它不会违反任何MVVM 规则。
【讨论】: