0

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

我目前使用的是 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 事件,但是如何让原始窗口保持隐藏状态,直到该事件发生,而不必坐在那里等待循环,这不是一个好主意。也许有人可以指导我将其设置为“触发”事件处理程序的自动事件,然后再激活前一个窗口?

4

2 回答 2

0

您可以考虑隐藏它们,而不是关闭窗口。这样,您可以在创建新窗口时传递对调用窗口的引用。

IE

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

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

this.Hide();
this.CallingWindow.Show();
于 2012-07-06T09:38:19.647 回答
0

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

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

例如

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
}

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

于 2012-07-06T09:39:07.017 回答