WPF closing child- closes parent-window
i have the pretty same sample as mentioned here. Fast concluded: MainWindow closes when the last childwindow is closed.
My Problem: I couldn't solve my problems with the described solutions. I can't produce a program where it als takes place. Only in one of my bigger progs. Maybe someone has an idea or knows any further steps.
Thanks for reading - Thomas
As requested here's a bit of code: This is the part in the 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);
}
And that's the part of the 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;
}
}
Try playing with the ShutDownMode
property of your App.xaml.cs
. The 3 values are OnMainWindowClose
, OnLastWindowClose
, and OnExplicitShutdown
, and the default is OnLastWindowClose
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;
}
}
- The below code worked for me.
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(); } }
you can try setting the child window's allowShutDown
to false
and then show the mainwindow. I'm assuming you will start with mainwindow's visibility set to hidden
.
Application.Current.MainWindow.Visibility = System.Windows.Visibility.Visible;
this.allowShutDown = false;
The allowShutDown
will be your own property which u can set to enable you have to handle the closing
event.
精彩评论