How do I return to a window after opening a second?

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-13 07:38:08

问题


My application is of such a nature that I need to jump around many windows consecutively. From my menu window I need to open another window (from the selection) and the disable or close the menu window.

What I'm currently using is window.show and then this.close() method to close the menu window.

Ex:

    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

    }

Then from within the new windows I just reopen the MainMenu window using the same method.

    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
    }

I then also keep a public variable class with static variables to store all the variables that are generic to all the windows.

All this is working fine for me except for one snag. If I were to call the UtilitiesMenyWindow from another window (not MainWindow) it's going to return to the MainMenu instead of the window I opened it from.

Is there a easier more generic way to return to the window that opened the secondary window without having to tell it to close itself and open a specific window (in this case it's "hardcoded" to MainMenu) (Obviously I first open and then close)

I was looking at the Unloaded event but how do I get the original window to stay hidden until this event occurs without it having to sit there and wait in a loop which is not a good idea. Maybe somebody can guide me in a way to set it up as an automatic event that "fires" the event-handler, which in turn then activates the previous window?


回答1:


Rather than closing windows, you could consider hiding them. That way, you could pass a reference to the calling window whenever you create a new window.

i.e.

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

then, when you want to close the new window and return:

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



回答2:


You could just close the original window - since all your windows are probably inheriting from Window class you just need to store the current window in a 'Window' typed variable on the utilities menu

This way you can continue doing what you are doing:

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 

} 

And add

Window _returnWindow;

on your utility window class

Then in that class on the close method you can call the original window type:

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

This is of course assuming you don't kill the original window



来源:https://stackoverflow.com/questions/11359572/how-do-i-return-to-a-window-after-opening-a-second

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!