WPF закрывает дочерний - закрывает родительское окно

У меня есть тот же образец, что и здесь. Быстрый вывод: MainWindow закрывается, когда закрывается последнее дочернее окно.

Моя проблема: я не мог решить свои проблемы с помощью описанных решений. Я не могу создать программу, в которой это происходит. Только в одной из моих больших прог. Может быть, у кого-то есть идея или есть какие-то дальнейшие шаги.

Спасибо за чтение - Томас

Как и было запрошено, немного кода: это часть MainWindow:

bool editAfterSearch = false;
Movie selectedMovie = (Movie)this.listView.SelectedItem;
Movie backup = (Movie)selectedMovie.Clone();            

if (new OnlineSearchWindow().EditMovieViaOnlineSearch(ref selectedMovie, out editAfterSearch))
{
    this.coverFlow.Update(selectedMovie);
}

И это часть ChildWindow:

public bool EditMovieViaOnlineSearch(ref Movie preset, out bool editAfter)
{
    this.exitWithOk = false;
    this.editMovieAfterSearch = false;

    this.tbx_SearchTerm.Text = preset.Title;
    this.linkedMovie = preset;

    this.ShowDialog();

    editAfter = editMovieAfterSearch;

    if (this.exitWithOk)
    {
        this.linkedMovie.CloneOnlineInformation(ref preset);
        preset.Bitmap = this.linkedMovie.Bitmap;

        return true;
    }
    else
    {
        return false;
    }
}

3 ответа

Решение

Попробуйте поиграть с ShutDownMode собственность вашего App.xaml.cs, 3 значения OnMainWindowClose, OnLastWindowClose, а также OnExplicitShutdownи по умолчанию OnLastWindowClose

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;
    }
}
  1. Код ниже работал для меня.
 private void Window_Closing (отправитель объекта, System.ComponentModel.CancelEventArgs e)
        {
            if (MessageBoxResult.No == (MessageBox.Show("Вы уверены, что хотите закрыть это?", "ProjectName", MessageBoxButton.YesNo)))
            {
                e.Cancel = true;
                foreach (элемент var в Application.Current.Windows)
                {
                    Окно окна = элемент как окно;
                    if (window.Title == "PopUpWindowName")
                    {
                        window.Topmost = true;
                        перерыв;
                    }
                }
                вернуть;
            }
            еще
            {
                base.OnClosed(е);
                Application.Current.Shutdown();
            }
        }

Вы можете попробовать установить дочернее окно allowShutDown в false а затем показать главное окно. Я предполагаю, что вы начнете с видимости главного окна, установленной на hidden,

Application.Current.MainWindow.Visibility = System.Windows.Visibility.Visible;
this.allowShutDown = false;  

allowShutDown будет вашим собственным свойством, которое вы можете установить, чтобы вы могли обрабатывать closing событие.

Другие вопросы по тегам