WPF关闭除活动子窗口和主窗口之外的所有子窗口

时间:2012-06-05 02:34:56

标签: c# wpf

当我打开一个新的子表单时,我有以下C#winforms代码来关闭所有子表单:

private void CloseAllActiveForms(Form[] MdiChildren)
        {
            Form[] childArray = MdiChildren;
            foreach (Form childform in childArray)
            {
                childform.Close();
            }
        }

如何在WPF窗口中使用?

我尝试了以下代码,但它将关闭所有窗口,包括Parent和Active窗口。

private void CloseAllWindows()
        {
            for (int intCounter = App.Current.Windows.Count - 1; intCounter >= 0; intCounter--)
            {
                Application.Current.Windows[intCounter].Close();
            }
        }

感谢。

2 个答案:

答案 0 :(得分:4)

据我所知,对WPF的MDI支持有限,因此在创建伪子窗口时尝试使用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()"

中抛出异常

答案 1 :(得分:1)

这是我在WPF中用来关闭程序的所有子窗口的方法,这个代码放在主窗口.c文件中,但你可以修改 if(item!= this) to检查特定窗口:

foreach(Window item in App.Current.Windows)
            {
                if(item!=this)
                    item.Close();
            }

不要忽略子类或更多列表(特别是因为代码已经有一个与之关联的窗口列表。)

如果您想有选择地关闭窗口,那么您可以随时修改if语句以在窗口类上使用变量或检查其中一个预先存在的变量(例如父窗口的类)< / em>在基本窗口类上。