2015-07-21 26 views
0

我有一個窗口(winReset)出現在啓動應用程序時出現。按完成後,主窗口打開。當我點擊一個按鈕時,如何決定是否創建一個新窗口

但是,主窗口包含一個按鈕,單擊它時會再次打​​開winReset。當這次單擊完成winReset時,我不想要一個新的主窗口實例,不像第一次。我只想關閉winReset。

我在這裏背後的代碼有問題。

這裏是我到目前爲止,我winReset後面的代碼,但它不工作:

private void btnClickDone(object sender, RoutedEventArgs e) 
    { 

     Window win = App.Current.Windows.OfType<Window>().SingleOrDefault(w => w.Name == "main"); 

     if (win.ShowDialog() == true) 
     { 

      this.Close(); 
     } 

     else 
     { 
      MainWindow main = new MainWindow(); 
      App.Current.MainWindow = main; 
      this.Close(); 
      main.Show(); 
      } 
} 

我想要做的就是創建一個新的主窗口只有一個已經不存在。如果有,那就關閉當前的winReset。我不知道爲什麼我正在努力,但我似乎無法弄清楚這一點。任何幫助?

+1

這很容易解決。當您重新創建'winReset'時,將'showMain'等'bool'變量設置爲'false'。一旦這個變量爲'false',點擊** done **將關閉應用程序。 –

+0

如何從其他窗口引用變量? – hereiam

回答

1

你可以檢查App.Current.MainWindow這樣的:

if (App.Current.MainWindow != null && App.Current.MainWindow.GetType() == typeof(MainWindow)) 
{ 
    this.Close(); 
} 
else 
{ 
    MainWindow main = new MainWindow(); 
    App.Current.MainWindow = main; 
    this.Close(); 
    main.Show(); 
} 
+0

這樣eveytime你創建一個mainWindow的新實例 – Muds

+0

在if語句之外,我怎樣才能引用MainWindow?我不能做一個'main = App.Current.MainWindow();' – hereiam

+1

你必須施放它的類型。你可以使用'var main = App.Current.MainWindow作爲MainWindow'或'var main =(MainWindow)App.Current.MainWindow' ... ...不要把你的'MainWindow'類和'MainWindow'類'應用程序類,即使它們具有相同的名稱。 – almulo

1

您可以創建主要爲本地對象,然後檢查其是否爲空或不..

Private MainWindow _main = null; 

然後在處理程序 -

if(_main == null) 
    _main = new MainWindow(); 

App.Current.MainWindow = _main; 
this.Close(); 
_main.Show(); 
+0

如果我在我的MainWindow中創建_main,如何在winReset窗口中使用它? – hereiam

+0

當前MainWindow將參考您的MainWindow – Muds

+0

_main = App.Current.MainWindow需要的地方 – Muds

0

當你想按照你的方法,這應該爲你工作:

Window win = App.Current.Windows.OfType<Window>().SingleOrDefault(w => w.DependencyObjectType.Name == "MainWindow"); 
if (win != null) 
{ 
    this.Close(); 
} 
else 
{ 
    MainWindow main = new MainWindow(); 
    App.Current.MainWindow = main; 
    this.Close(); 
    main.Show(); 
} 
相關問題