Как я могу закрыть и снова открыть окно в wpf? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть приложение wpf с кнопкой, которая открывает новое окно, в котором я хочу определить некоторые настройки. Смотрите следующий код:

public partial class MainWindow : Window
{
    private SettingsWindow SettingsWindow;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void settings_Click(object sender, RoutedEventArgs e)
    {
        if (this.SettingsWindow == null)
        {
            SettingsWindow = new SettingsWindow(); // No reentrace here !!!
        }
        SettingsWindow.Show();
        SettingsWindow.Focus();
    }
}

Однако, когда я закрываю окно «Настройки» и хочу снова открыть его из главного окна, все приложение зависает. Я думал, что объект будет уничтожен при закрытии и, таким образом, заново инициализирован внутри предложения if.

Должен ли я сделать переопределение в процедуре закрытия окна настроек или я что-то еще проигнорировал?

1 Ответ

0 голосов
/ 04 сентября 2018

Вы захотите отследить, закрылось ли окно настроек. В противном случае вы снова показываете окно, которое, вероятно, было закрыто и расположено. Закрытие окна не удалит вашу ссылку на него.

 public class SettingsWindow : Window
{
    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        this.IsClosed = true;
    }

    public bool IsClosed { get; private set; }
}

public partial class MainWindow : Window
{
    private SettingsWindow settingsWindow;
    private void settings_Click(object sender, RoutedEventArgs e)
    {
        if (this.settingsWindow == null || this.settingsWindow.IsClosed) 
        {
            this.settingsWindow = new SettingsWindow();
        }
        this.settingsWindow.Show();
        this.settingsWindow.Focus();
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...