【问题标题】:Hiding a Window hides the MainWindow隐藏窗口会隐藏 MainWindow
【发布时间】:2016-08-08 20:14:11
【问题描述】:

我的应用程序中除了 MainWindow 之外还有另一个窗口,我像这样覆盖关闭方法,因为我不希望窗口完全关闭:

private void Window_Closing(object sender, CancelEventArgs e)
{
    e.Cancel = true;
    this.Visibility = Visibility.Hidden;
}

然后在构造函数中:

public Inputwindow()
{
    InitializeComponent();
    this.Closing += Window_Closing;
}

但现在如果我想关闭我的 MainWindow,它只会隐藏 MainWindow。

不知道如何让它工作。

【问题讨论】:

  • 你想隐藏或关闭什么?
  • 我相信他不想处置窗口。 window_closure 事件在哪里声明?如果 this.visibility = visibility.hidden 关闭主窗口意味着这是主窗口,所以你在错误的地方声明了它。
  • @MegaTron 在我的主窗口中我打开另一个窗口,如果我单击这个新窗口的关闭按钮,则不应关闭该窗口。所以我实现了上面的方法来隐藏新窗口。但是现在如果我单击主窗口上的关闭按钮,它不会关闭整个应用程序。它只会隐藏 MainWindow。
  • @sstan 不,MainWindow 是一个类,Inputwindow 是另一个类。

标签: c# wpf xaml


【解决方案1】:

每个 WPF 应用程序都有一个名为 Application.ShutdownMode 的属性,它决定了应用程序何时真正结束。默认情况下,它设置为 OnLastWindowClose,这意味着应用程序在所有窗口关闭之前不会结束(即使主窗口关闭)。听起来您希望应用程序在主窗口关闭时结束,即使其他窗口没有关闭,只是隐藏,这对应于 OnMainWindowClose 模式。以下是相关的 MSDN 文档:https://msdn.microsoft.com/en-us/library/system.windows.application.shutdownmode(v=vs.110).aspx

要在您的 xaml 中设置属性,请打开 App.xaml 文件并添加 ShutdownMode 属性,如下所示:

<Application x:Class="TestClass"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" ShutdownMode="OnMainWindowClose">       

</Application>

【讨论】:

  • 那么,如果我为 MainWindow 实现一个关闭方法,关闭所有其他窗口,然后关闭 MainWindow,它会起作用吗?
  • 是的,这是一种可能的方法,但我认为最好明确说明这一点。由于您希望在关闭主窗口时关闭应用程序,因此我建议您相应地设置 ShutdownMode。我用如何在 App.xaml 文件中设置属性的示例编辑了我的答案。只需将 ShutdownMode 属性附加到 App.xaml 中的 Application 标记,就像我在示例代码中所做的那样。你的应该是相似的,除了你可能添加了一些我没有的其他属性。
  • 是的,在我的 App.xaml 中设置属性对我有用!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 2018-05-29
相关资源
最近更新 更多