WPF: Невозможно повторно использовать окно после того, как оно было закрыто

Я пытаюсь сохранить один экземпляр окна и при необходимости вызвать ShowDialog . Это помогло найти в winforms, но в WPF я получаю следующее исключение:

System.InvalidOperationException: Невозможно установить Visibility или вызвать Show, ShowDialog или WindowInteropHelper.EnsureHandle после закрытия окна.

Есть ли способ что-то сделать как в WPF?

MyWindow.Instance.ShowDialog();

public class MyWindow : Window
{
    private static MyWindow _instance;

    public static MyWindow Instance
    {
        if( _instance == null )
        {
            _instance = new Window();
        }
        return _instance();
    }
}
45
задан Jerod Houghtelling 25 August 2010 в 16:37
поделиться

1 ответ

Я полагаю, вы могли бы сделать это, если бы вы изменили видимость окна, а не закрыли его. Вам нужно будет сделать это в событии Closing(), а затем отменить закрытие. Если вы позволите закрытию произойти, вы, конечно, не сможете повторно открыть закрытое окно - отсюда :

Если событие закрытия не отменено, происходит следующее:

...

Неуправляемые ресурсы, созданные Окном, удаляются.

После этого окно больше никогда не будет действительным.

Я не думаю, что это стоит затраченных усилий — создание нового окна каждый раз не так уж сильно влияет на производительность, и у вас гораздо меньше шансов ввести сложные для отладки ошибки / утечки памяти. (Кроме того, вам нужно убедиться, что оно закрылось и освободило свои ресурсы, когда приложение закрывается)


Просто прочитайте, что вы используете ShowDialog(), это сделает окно модальным и просто скрыть его не получится. вернуть управление родительскому окну. Я сомневаюсь, что это вообще возможно сделать с модальными окнами.

47
ответ дан 26 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: