Я пытаюсь сохранить один экземпляр окна
и при необходимости вызвать 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();
}
}
Я полагаю, вы могли бы сделать это, если бы вы изменили видимость окна, а не закрыли его. Вам нужно будет сделать это в событии Closing(), а затем отменить закрытие. Если вы позволите закрытию произойти, вы, конечно, не сможете повторно открыть закрытое окно - отсюда :
Если событие закрытия не отменено, происходит следующее:
...
Неуправляемые ресурсы, созданные Окном, удаляются.
После этого окно больше никогда не будет действительным.
Я не думаю, что это стоит затраченных усилий — создание нового окна каждый раз не так уж сильно влияет на производительность, и у вас гораздо меньше шансов ввести сложные для отладки ошибки / утечки памяти. (Кроме того, вам нужно убедиться, что оно закрылось и освободило свои ресурсы, когда приложение закрывается)
Просто прочитайте, что вы используете ShowDialog(), это сделает окно модальным и просто скрыть его не получится. вернуть управление родительскому окну. Я сомневаюсь, что это вообще возможно сделать с модальными окнами.