WPF关闭子 - 关闭父窗口

时间:2011-10-05 12:30:54

标签: wpf childwindow mainwindow

我有与提到的here相同的样本。 快速结束: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 个答案:

答案 0 :(得分:8)

尝试使用ShutDownMode的{​​{1}}属性进行游戏。 3个值为App.xaml.csOnMainWindowCloseOnLastWindowClose,默认值为OnExplicitShutdown

OnLastWindowClose

答案 1 :(得分:1)

  1. 以下代码对我有用。
  2.  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();
                }
            }
    

答案 2 :(得分:0)

您可以尝试将子窗口的allowShutDown设置为false,然后显示主窗口。我假设您将从主窗口的可见性设置为hidden开始。

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

allowShutDown将是您自己的属性,您可以将其设置为允许您处理closing事件。