WPF,在多个窗口之间切换而不进行处置

本文关键字:之间 窗口 WPF | 更新日期: 2023-09-27 18:26:07

我有3个窗口,可以在它们之间切换。我遇到的问题是窗口在隐藏时无法保存数据。我认为他们在某个地方被处置了,但我不确定是怎么处置的。我在两个窗口上有一个文本框来测试这个。当只有两个窗口时,它工作得很好,但添加第三个窗口就产生了这个问题。这是我的主窗口。

public partial class MainWindow : Window
{
    private AutoImport auto;
    private DTLegacy dleg;
    public MainWindow()
    {
        InitializeComponent();
    }
    public MainWindow(AutoImport parent)
    {
        InitializeComponent();
        auto = parent;
    }
    public MainWindow(DTLegacy parent)
    {
        InitializeComponent();
        dleg = parent;
    }
    private void btnAutoImport_Click(object sender, RoutedEventArgs e)
    {
        this.Hide();
        if (auto == null) { auto = new AutoImport(); }
        auto.Show();
    }
    private void btnDTLegacy_Click(object sender, RoutedEventArgs e)
    {
        this.Hide();
        if (dleg == null) { dleg = new DTLegacy(); }
        dleg.Show();
    }
}

窗口1

public AutoImport()
{
    InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
    this.Hide();
    MainWindow main = new MainWindow(this);
    main.Show();
}

窗口2

public DTLegacy()
{
    InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
    this.Hide();
    MainWindow main = new MainWindow(this);
    main.Show();
}

我想答案可能是创建某种窗口类,但我不确定这会是什么样子。

WPF,在多个窗口之间切换而不进行处置

为什么每次都要创建一个新的MainWindow实例?您当前正在隐藏它,请再次显示它,而不是创建新的。假设它是应用程序的主窗口,而AutoImport/DTLegacy是"子"窗口,一种解决方案是将MainWindow实例作为"子"窗的参数传递,这样您就可以轻松地调用.Show()

private MainWindow parent;
public AutoImport(MainWindow parent)
{
    InitializeComponent();
    this.parent = parent;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
    this.Hide();
    this.parent.Show();
}