C# WPF如何关闭通过父窗口打开的所有子窗口

2021-11-01 16:48:09 浏览数 (1)

代码语言:javascript复制
foreach (Window item in Application.Current.Windows)
{
    if (item.Title == "") continue; // 跳过无标题窗口
  if (item.Title != "父窗口标题") item.Close();
}

WinForm时这样操作的:

代码语言:javascript复制
// 遍历并关闭所有子窗口
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中时这样操作的:

代码语言:javascript复制
// 遍历并关闭所有子窗口
Window[] childArray = Application.Current.Windows.Cast<Window>().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<Window>().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的界面调试器,如果它被关闭会导致被调试的程序也被关闭,Release程序可以不用对无标题窗口进行排除。

wpf

0 人点赞