2011-10-05 220 views
2

我有与上述here相同的样本。快速结束:当最后一个子窗口关闭时,MainWindow关闭。WPF关闭子关闭父窗口

我的问题:我无法解决我所描述的解决方案的问题。我无法制作一个可以发生的程序。只在我的一个更大的前卫。也许有人有一个想法或知道任何进一步的步骤。

感谢您的阅读 - 托马斯

如这里要求是一个有点代码: 这是在主窗口的部分:

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

你能具体描述一下您的设计和像它在博客文章中提到你不能做什么?我现在不明白。 – MatthiasG

回答

8

试试用您的App.xaml.csShutDownMode物业玩。三个值OnMainWindowCloseOnLastWindowCloseOnExplicitShutdown,默认是OnLastWindowClose

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose; 
    } 
} 
+0

谢谢,这个伎俩。你有解释你的解决方案吗? –

+0

那么默认'ShutdownMode'是'OnLastWindowClose',所以如果你关闭所有的子窗口,那么它将关闭应用程序。 'OnMainWindowClose'表示应用程序将在你的App.Current.MainWindow关闭时关闭,'OnExplicitShutdown'表示只有当你告诉它关闭时它才会关闭。 – Rachel

+0

因此,当OnLastWindowClose时,MainWindow不算作窗口吗? –

0

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

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

allowShutDown将是你自己的财产ü可以设定,让你不得不处理closing事件。

1
  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(); 
      } 
     }