打开一秒钟后如何返回窗口?

时间:2012-07-06 09:32:24

标签: c# wpf event-handling show

我的应用程序具有这样的性质,我需要连续跳过许多窗口。从我的菜单窗口,我需要打开另一个窗口(从选择中)和禁用或关闭菜单窗口。

我目前使用的是window.show,然后是this.close()方法来关闭菜单窗口。

例如:

    private void MainMenuControl_Link1MouseDown(object sender, RoutedEventArgs e)
    {

        // Utilities
        UtilitiesMenyWindow UtilitiesMenyWindow = new UtilitiesMenyWindow(); // Assign Variable to window
        UtilitiesMenyWindow.Show(); // Open window
        this.Close(); // close current window

    }

然后在新窗口中我使用相同的方法重新打开MainMenu窗口。

    private void Utilities_Link3MouseDown(object sender, RoutedEventArgs e)
    {
        // Return to Main
        MainMenuWindow MainMenu = new MainMenuWindow(); // Assign Variable to window
        MainMenu.Show(); // Open Main window
        this.Close(); // close login window
    }

然后我还使用静态变量保存一个公共变量类,以存储所有窗口通用的所有变量。

除了一个障碍外,这一切对我来说都很好。如果我从另一个窗口(而不是MainWindow)调用UtilitiesMenyWindow,它将返回MainMenu而不是我打开它的窗口。

是否有一种更简单,更通用的方式返回打开辅助窗口的窗口,而不必告诉它关闭自己并打开一个特定的窗口(在这种情况下,它是“硬编码”到MainMenu)(显然我先打开并且然后关闭)

我正在查看Unloaded事件但是如何让原始窗口保持隐藏直到发生此事件而不必坐在那里等待循环这不是一个好主意。 也许某人可以指导我将其设置为“触发”事件处理程序的自动事件,然后激活前一个窗口?

2 个答案:

答案 0 :(得分:0)

您可以考虑隐藏它们,而不是关闭窗口。这样,无论何时创建新窗口,都可以将引用传递给调用窗口。

UtilitiesMenyWindow UtilitiesMenyWindow = new UtilitiesMenyWindow();
UtilitiesMenyWindow.CallingWindow = this;
UtilitiesMenyWindow.Show();
this.Hide();

然后,当你想要关闭新窗口并返回时:

this.Hide();
this.CallingWindow.Show();

答案 1 :(得分:0)

您可以关闭原始窗口 - 因为您的所有窗口都可能从Window类继承,您只需将当前窗口存储在实用程序菜单上的“Window”类型变量中

这样你就可以继续做你正在做的事情:

e.g。

private void MainMenuControl_Link1MouseDown(object sender, RoutedEventArgs e) 
{ 

    // Utilities 
    UtilitiesMenyWindow UtilitiesMenyWindow = new UtilitiesMenyWindow(); // Assign Variable to window 
    UtilitiesMenyWindow.ReturnWindow = this;
    UtilitiesMenyWindow.Show(); // Open window 
    this.Hide(); // hide current window 

} 

并添加

Window _returnWindow;

在实用程序窗口类

然后在close方法的那个类中,你可以调用原始窗口类型:

private void Utilities_Link3MouseDown(object sender, RoutedEventArgs e)
{
    // Return to original
    _returnWindow.Show();
    this.Close(); // close login window
}

这当然是假设您没有杀死原始窗口