WPF 关闭除活动子窗口和主窗口之外的所有子窗口
本文关键字:窗口 活动 WPF | 更新日期: 2023-09-27 18:36:19
我有如下 C# WinForms 代码,以便在打开新的子窗体时关闭所有子窗体:
private void CloseAllActiveForms(Form[] MdiChildren)
{
Form[] childArray = MdiChildren;
foreach (Form childform in childArray)
{
childform.Close();
}
}
如何在 WPF 窗口中使用?
我尝试了下面的代码,但它将关闭所有窗口,包括父窗口和活动窗口。
private void CloseAllWindows()
{
for (int intCounter = App.Current.Windows.Count - 1; intCounter >= 0; intCounter--)
{
Application.Current.Windows[intCounter].Close();
}
}
谢谢。
据我所知,MDI 对 WPF 的支持是有限的,因此在创建伪子窗口时尝试使用 Tag 属性:
Window child = new Window();
child.Tag = "mdi_child";
然后,在你的循环中,像这样修改它:
foreach (Window win in App.Current.Windows)
{
if (!win.IsFocused && win.Tag.ToString() == "mdi_child")
{
win.Close();
}
}
请注意,要使上述解决方案正常工作,所有窗口都必须具有 Tag 属性,否则将在 win.Tag.ToString()
处引发异常。
这是我在 WPF 中使用的一种关闭程序的所有子窗口的方法,此代码位于主window.cs
文件中,但您可以修改if(item!=this)
以检查特定窗口:
foreach(Window item in App.Current.Windows)
{
if(item!=this)
item.Close();
}
不要纠结于子类或更多列表(特别是因为代码已经有一个与之关联的窗口列表。
如果要有选择地关闭窗口,则始终可以修改 if 语句以在窗口类上使用变量或检查基窗口类上预先存在的变量之一(例如父窗口的类)。