如何重新打开关闭的窗口?

时间:2012-01-05 11:21:17

标签: wpf windows-applications

我见过这么多样本,为了打开关闭的窗口,我应该在关闭事件中隐藏窗口,但如果我在工作中间关闭窗口并再次打开同一个窗口显示我,这对我来说不公平我离开的内容,因为我之前隐藏了窗口。那么我怎么能在关闭或隐藏窗户后重新开始我的窗户。

目前我正在调用winload方法,即在调用隐藏窗口的show方法后显示新窗口。

    private PurgeData data=new PurgeData();

private void MenuPurgeData_Click(object sender, RoutedEventArgs e)
        {

            try
            {
                if (PurgeData == null)
                {
                    PurgeData = new PurgeData();
                    PurgeData.Show();
                }
                else
                {
                    PurgeData.WinLoad();
                    PurgeData.Show();                    
                }
            }

谢谢, @nagaraju。

3 个答案:

答案 0 :(得分:9)

如果你想要隐藏/显示的行为,你根本不应该在窗口上调用Window.Close(),而是通过调用Window.Hide()来隐藏它。如果用户关闭了它并且无法避免关闭,您可以尝试以下操作。覆盖窗口内的OnClosing并将e.Cancelled设置为true,然后调用.Hide()。即使用户关闭窗口,这也应该允许隐藏/显示窗口。

// Disclaimer, untested! 
protected override void OnClosing(CancelEventArgs e)    
{        
    e.Cancel = true;  // cancels the window close    
    this.Hide();      // Programmatically hides the window
}

修改

好的我现在已经正确地阅读了你的问题;-) 那么我怎样才能在关闭或隐藏窗口后重新开始我的窗口。

当您使用上面的内容重新显示窗口时,它当然将与之前隐藏的窗口相同,因此将具有相同的数据和状态。如果你想要全新的内容,你需要创建一个新的Window()并在其上调用Window.Show()。如果您隐藏/显示如上所示,那么您将在隐藏窗口之前将窗口恢复到完全相同的状态。

您是否在WPF应用程序中使用MVVM模式?如果是这样,您可以尝试以下方法。通过将所有数据放在ViewModel中并通过View绑定(即:没有业务逻辑或Window后面的代码中的数据),您可以在ViewModel上调用一个方法,以便在显示窗口时重置所有数据。您的绑定将刷新,窗口状态将被重置。请注意,只有在您正确地遵循MVVM并将主窗体上的所有元素绑定到ViewModel属性(包括子控件)时,这才有效。

致以最诚挚的问候,

答案 1 :(得分:1)

这实际上取决于您的应用的结构。由于您没有维护状态,因此您只需要保存已关闭的实际窗口类型。根据您正在使用的窗口类型,您可以为其分配一个ID(例如,在其Tag属性中),以便以后可以识别它。然后,您可以在Closing的{​​{1}}事件中推送此ID。然后,如果用户重新打开它,则弹出堆栈以获取ID并检查对应的窗口。然后,您可以重新打开该窗口。

当然,Stack只是一种数据结构,它可能适合您,也可能不适合您。使用堆栈意味着用户可以重新打开他们关闭的所有过去的窗口,但也许您可能只想要一个窗口。

编辑 - 基本代码:

Stack

答案 2 :(得分:0)

 this.Opacity = 0 

“关闭窗口”

 this.Opacity = 1 

“重新打开”

有关Hide()方法的说明:实际上,在另一个类中,该窗口将被视为已关闭,并且在使用ShowDialog()方法之后,该代码将继续。使用“不透明度”属性可解决此问题。