在伪代码中,这就是我试图从主窗口执行的操作,其中包含许多可以独立于主窗口打开和关闭的非模态子窗口。(想想"偏好"或"查找"(
按下"打开窗口">
时步骤1:如果窗口不存在,请创建它。
第2步:窗口现在存在,因此请将其置于前面并使其可见。
(第 2 步是 NB,以防在窗口已经打开时按下 OPEN WINDOW - 我不想要它的多个实例,只需将其放在前面即可。
按下"关闭窗口">
时第 3 步:关闭窗口
替代步骤 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();
}
我的代码/逻辑哪里出错了?谢谢,我对编码很陌生,花了几周时间试图做到这一点。
不能使用已关闭的Window
,因为此时已释放其资源。解决方案是每次要显示新Window
时只需创建一个新即可。
我可以看到您正在传入一个Window
对象,然后试图找到特定类型的Window
......在这种情况下,您可以使用反射从其Type
中实例化您的Window
。特别是,请参阅 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();
}