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;
}
}
- Код ниже работал для меня.
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
событие.