WPF закрывает дочерний - закрывает родительское окно - PullRequest
2 голосов
/ 05 октября 2011

У меня есть тот же образец, что и упомянутый здесь .Быстрый вывод: 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 ]

8 голосов
/ 05 октября 2011

Попробуйте поиграть со свойством 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 голос
/ 15 февраля 2017
  1. У меня работает приведенный ниже код.
 private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (MessageBoxResult.No == (MessageBox.Show("Are you sure you want to close this?.", "ProjectName", MessageBoxButton.YesNo)))
            {
                e.Cancel = true;
                foreach (var item in Application.Current.Windows)
                {
                    Window window = item as Window;
                    if (window.Title == "PopUpWindowName")
                    {
                        window.Topmost = true;
                        break;
                    }
                }
                return;
            }
            else
            {
                base.OnClosed(e);
                Application.Current.Shutdown();
            }
        }
0 голосов
/ 18 июня 2012

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

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

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

...