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); }