2011-10-05 8 views
2

난 꽤 here 같은 샘플 있습니다. 빠른 결론 : 마지막 자식 창이 닫히면 MainWindow가 닫힙니다.WPF 닫는 자식 닫는 부모 창

내 문제 : 설명 된 솔루션으로 문제점을 해결할 수 없습니다. 나는 그것이 일어나는 곳에서 프로그램을 만들 수 없다. 내 큰 프로그램 중 하나에서만. 어쩌면 누군가가 아이디어를 가지고 있거나 더 많은 단계를 알고있을 것입니다. 읽기

감사합니다 - 토마스

여기에 요청 코드의 비트입니다로서 : 이것은 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; 
    } 
} 
+0

당신은 당신의 디자인을 설명하십시오 수 및이 블로그 게시물에서 언급 한 것처럼 정확히 무엇을 할 수 있습니까? 나는 그 순간에 그것을 얻지 못한다. – MatthiasG

답변

8

App.xaml.csShutDownMode 속성으로 재생 해보십시오. 3 개 값은 OnMainWindowClose, OnLastWindowCloseOnExplicitShutdown이며, 디폴트는 자식 윈도우의 allowShutDownfalse에 다음 보여 MainWindow를 설정을 시도 할 수 있습니다 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

입니다. 메인 윈도우의 가시성이 hidden으로 설정되어 있다고 가정합니다.

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

allowShutDown은 u는 당신이 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(); 
      } 
     } 
관련 문제