WPF程序自动控制父窗体的隐藏和显示

一些界面进行一些管理操作的时候,需要在主界面上打开新的窗体。有时候弹出的管理窗体,又需要再弹出新的管理窗体。这样的话,窗体一层一层的会非常多。

就像我之前做的一个项目,后面需要进行模块管理,首先打开【模块列表界面】,新建模块以后需要弹出【模块编辑界面】,模块编辑界面里会有接口列表,对某个接口进行编辑的时候,又需要弹出【接口信息界面】,界面上会显示这个接口所有的通道。

这样的话,如果到【接口信息】界面,正常的话,窗口层次是这样的:

【主界面】-【模块列表界面】-【模块编辑界面】-【接口信息界面】

相当于有四层接口,看着有点乱。

不知道大家有没有什么好的处理办法。

现在我的一个办法是,除了【主界面】外,打开下一层的界面时,把上一层的界面先隐藏。比如,打开【模块编辑界面】的时候,先把【模块列表界面】先隐藏了。

封装了一个类:

public class WindowShowHideScope : IDisposable
{
    public Window Owner { get; }

    public WindowShowHideScope()
    {
        Owner = App.GetActiveWindow();
        Owner?.Hide();
    }

    public void Dispose()
    {
        Owner?.Show();
    }
}

 

具体的使用代码:

using (var scope = new WindowShowHideScope())
{
    new WinHistoryInfo() { Owner = scope.Owner }.ShowDialog();
}

因为我平常用的是MVVM模式来开发的,GetActiveWindow方法是用来获取当前窗体用的。方法代码:
public static Window GetActiveWindow()
{
    return Application.Current.Windows.Cast<Window>().FirstOrDefault(s => s.IsActive == true);
}

 

 
posted @ 2022-07-29 16:40  wzwyc  阅读(886)  评论(0编辑  收藏  举报