C# WinForm和WPF关闭所有子窗口的方法

WinForm时这样操作的:

// 遍历并关闭所有子窗口
FormCollection childCollection = Application.OpenForms;
for (int i = childCollection.Count; i-- > 0;)
{
	if (childCollection[i].Name != "父窗口标题") childCollection[i].Close();
}
// 或者也可以这样写:
FormCollection childCollection = Application.OpenForms;
for (int i = childCollection.Count; i-- > 0;)
{
	if (childCollection[i].Name != this.Title) childCollection[i].Close();
}

WPF中时这样操作的:

// 遍历并关闭所有子窗口
Window[] childArray = Application.Current.Windows.Cast().ToArray();
for (int i = childArray.Length; i-- > 0;)
{
	Window item = childArray[i];
	if (item.Title == "") continue; // 忽略无标题窗口
	if (item.Title != "父窗口标题") item.Close();
}
// 或者也可以这样写:
Window[] childArray = Application.Current.Windows.Cast().ToArray();
for (int i = childArray.Length; i-- > 0;)
{
	Window item = childArray[i];
	if (item.Title == "") continue; // 忽略无标题窗口
	if (item.Title != this.Title) item.Close();
}

总结, 注意WPF中要排除无标题窗口,否则会导致程序被关闭。
这里猜测这个无标题窗口才是WPF中最上级的父窗口,所以不能被关闭。

你可能感兴趣的:(C#开发,WPF开发)