【问题标题】:Cannot reuse wpf window after closing关闭后无法重用wpf窗口
【发布时间】:2012-06-28 12:44:34
【问题描述】:

我正在使用一个窗口来更改我的应用程序的数据库配置。设置按钮单击由 Config() 处理,单击时显示设置窗口。如果我关闭窗口右上角的使用十字符号,我将无法重用它显示以下异常的窗口。

在窗口关闭后无法设置可见性或调用 Show、ShowDialog 或 WindowInteropHelper.EnsureHandle。

ConfigDialogBox configDlg = new ConfigDialogBox();

        private void SettingsChanged(object sender, RoutedEventArgs e)
        {
            Database.host = configDlg.host;
            Database.port = configDlg.port;
            Database.user = configDlg.user;
            Database.password = configDlg.password;
            Database.database = configDlg.database;            
            ConfigDlg.Visibility = Visibility.Hidden;
        }

        private void Config(object sender, RoutedEventArgs e)
        {            
            configDlg.Show();
            configDlg.okButton.Click+=new RoutedEventHandler(SettingsChanged);
            configDlg.cancelButton.Click+=new RoutedEventHandler(SettingsChanged);
        }

        void cancel_Click(object sender, RoutedEventArgs e)
        {         
           ConfigDlg.Visibility = Visibility.Hidden;
        }

关闭后如何重复使用?

【问题讨论】:

  • 为什么要重复使用,不能自己新建一个吗?
  • 此窗口包含数据库配置,如果关闭窗口,我将丢失所有设置。 ok 和 cancel 工作正常,只有 close 会导致问题。

标签: c# wpf


【解决方案1】:

您不能重复使用该窗口。

如果通过 OKCancel 按钮以外的方式关闭窗口是您的问题,您需要处理 Window.Closing 事件(请参阅链接以获取示例) .

【讨论】:

    【解决方案2】:
    ConfigDialogBox configDlg = null;
    
    
    
    private void Config(object sender, RoutedEventArgs e)
            {            
             configDlg = new ConfigDialogBox();
                configDlg.Show();
                configDlg.okButton.Click+=new RoutedEventHandler(SettingsChanged);
                configDlg.cancelButton.Click+=new RoutedEventHandler(SettingsChanged);
            }
    

    【讨论】:

    【解决方案3】:

    你不能。只需创建一个新窗口即可。

    【讨论】:

    • 实际上,如果不希望的窗口关闭,所有设置都会丢失。
    • 我认为您建议的更改是添加 configDlg = new ConfigDialogBox();在 configDlg.show 之前,它并没有解决我的问题。
    • 不要将设置存储在ConfigDialogBox 实例中。使用“确定”按钮关闭对话框时,将其保存在其他位置。
    猜你喜欢
    • 2011-04-03
    • 2016-01-22
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多