首页 > 解决方案 > 如何在 wpf 中关闭和重新打开一个窗口?

问题描述

我有一个带有按钮的 wpf 应用程序,它会打开一个新窗口,我想在其中确定一些设置。请参见以下代码:

public partial class MainWindow : Window
{
    private SettingsWindow SettingsWindow;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void settings_Click(object sender, RoutedEventArgs e)
    {
        if (this.SettingsWindow == null)
        {
            SettingsWindow = new SettingsWindow(); // No reentrace here !!!
        }
        SettingsWindow.Show();
        SettingsWindow.Focus();
    }
}

但是,当我关闭 SettingsWindow 并想从 MainWindow 重新打开它时,整个应用程序会冻结。我认为该对象将在关闭时被销毁,因此在 if 子句中重新初始化。

我是否必须在 SettingsWindow 的关闭例程中进行覆盖,或者我是否忽略了其他内容?

标签: c#wpf

解决方案


您将要跟踪是否SettingsWindow已关闭。否则,您将重新显示一个可能已关闭并已处置的窗口。关闭窗口不会删除您对它的引用。

public class SettingsWindow : Window
{
    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        this.IsClosed = true;
    }

    public bool IsClosed { get; private set; }
}

public partial class MainWindow : Window
{
    private SettingsWindow settingsWindow;
    private void settings_Click(object sender, RoutedEventArgs e)
    {
        if (this.settingsWindow == null || this.settingsWindow.IsClosed) 
        {
            this.settingsWindow = new SettingsWindow();
        }
        this.settingsWindow.Show();
        this.settingsWindow.Focus();
    }
}

推荐阅读