문제

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;
    }
}

다른 팁

  1. 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.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top