0

在伪代码中,这就是我试图从主窗口执行的操作,其中有许多非模态子窗口可以独立于主窗口打开和关闭。(想想“偏好”或“发现”)

按“打开窗口”
第 1 步:如果窗口不存在,则创建它。
第 2 步:窗口现在存在,因此将其放在前面并使其可见。
(步骤 2 是 NB,以防在窗口已经打开时按下 OPEN WINDOW - 我不想要它的多个实例,只需将它带到前面。)

按“关闭窗口”
第 3 步:关闭窗口
ALT 第 3 步:隐藏窗口

这是我尝试过的代码。我尽可能地打开窗户,如果在窗户打开时再次按下 OPEN WINDOW,将它带到前面。但是,一旦我关闭窗口,我就无法再次打开它。我收到一条错误消息,指出窗口关闭后无法使用 Window.Show()。

public static void OpenWindowOnce(Window windowToOpen)
    {
        foreach (Window n in Application.Current.Windows)
        {
            //Checks if the window is already open, and brings it to the front if it is
            if (n.GetType() == windowToOpen.GetType())
                {}                    
            else
                {  windowToOpen.Show(); }
        }

        windowToOpen.Activate();
    }

我的代码/逻辑哪里出错了?谢谢,我对编码还很陌生,并且花了数周时间试图做到这一点。

4

1 回答 1

0

您不能使用Window已关闭的 a,因为它的资源当时已被处置。Window解决方案是在每次要显示它时简单地创建一个新的。

我可以看到您正在传递一个Window对象,然后尝试找到特定类型的Window... 在这种情况下,您可以使用反射Window从它们的Type. 特别是,请参阅 MSDN 上的Activator.CreateInstance方法页面。你可以像这样使用它:

public static void OpenWindowOnce(Window windowToOpen)
{
    foreach (Window n in Application.Current.Windows)
    {
        //Checks if the window is already open, and brings it to the front if it is
        if (n.GetType() == windowToOpen.GetType()) { ... }
        else
        {
            windowToOpen = Activator.CreateInstance(typeof(YourWindow)) as YourWindow;
            windowToOpen.Show(); 
        }
    }
    windowToOpen.Activate();
}
于 2014-08-06T15:16:03.703 回答