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

C# WPF关闭除活动子窗口和主窗口之外的所有子窗口,c#,wpf,C#,Wpf,我有如下C#WinForms代码,用于在打开新子窗体时关闭所有子窗体: private void CloseAllActiveForms(Form[] MdiChildren) { Form[] childArray = MdiChildren; foreach (Form childform in childArray) { childform.Close(); } } 如何在WPF窗口中使用 我尝试了下面的代码,但它将关闭所有窗口,包括父窗口

我有如下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的支持是有限的,因此在创建伪子窗口时,请尝试使用标记属性:

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

请注意,要使上述解决方案正常工作,所有窗口都必须具有标记属性,否则将在
win.Tag.ToString()

中引发异常。据我所知,MDI对WPF的支持有限,因此在创建伪子窗口时尝试使用标记属性:

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

请注意,要使上述解决方案正常工作,所有窗口都必须具有标记属性,否则将在
win.Tag.ToString()

中引发异常。以下是我在WPF中使用的一种方法,用于关闭程序的所有子窗口,此代码位于主
window.cs
文件中,但如果(项!=此项),则可以修改
要检查特定窗口,请执行以下操作:

foreach(Window item in App.Current.Windows)
{
    if(item!=this)
        item.Close();
}
不要随意使用子类或更多列表(尤其是代码已经有了一个与之关联的窗口列表。)


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

以下是我在WPF中用于关闭程序所有子窗口的方法,此代码位于主
window.cs
文件中,但您可以修改
if(item!=this)
以检查特定窗口:

foreach(Window item in App.Current.Windows)
{
    if(item!=this)
        item.Close();
}
不要随意使用子类或更多列表(尤其是代码已经有了一个与之关联的窗口列表。)


如果要有选择地关闭窗口,则可以修改If语句以在窗口类上使用变量,或检查基本窗口类上的一个预先存在的变量(如父窗口的类)。

除了使用MDI之外,还有其他选择吗?MDI样式的应用程序已“过时”这就是WPF放弃支持的原因。应用程序的目标是什么?基于MDI的应用程序最常见的替代方案是基于选项卡的界面。子窗口变成选项卡,所有选项卡都存在于同一窗口中。抱歉,前面的评论很难回答您的问题。我有一个wpf应用程序,带有菜单。。。我需要点击菜单在主窗口中显示另一个窗口。。。当我单击另一个菜单项时,在显示新窗口之前,应该关闭以前打开的窗口。在这种情况下,您可能希望继续使用MDI。选项卡式界面就没有那么有意义了。关于如何进行MDI的完整解释很长,但这里有一个扩展WPF的好项目:除了使用MDI之外还有其他选择吗?MDI风格的应用程序已经“过时”,这就是WPF放弃支持的原因。应用程序的目标是什么?基于MDI的应用程序最常见的替代方案是基于选项卡的界面。子窗口变成选项卡,所有选项卡都存在于同一窗口中。抱歉,前面的评论很难回答您的问题。我有一个wpf应用程序,带有菜单。。。我需要点击菜单在主窗口中显示另一个窗口。。。当我单击另一个菜单项时,在显示新窗口之前,应该关闭以前打开的窗口。在这种情况下,您可能希望继续使用MDI。选项卡式界面就没有那么有意义了。关于如何进行MDI的完整解释很长,但这里有一个扩展WPF的好项目: