2012-06-05 103 views
0

所有的子窗口,我有C#的WinForms代碼如下所示關閉所有子窗體,當我打開一個新的子窗體:WPF關閉除活動的子窗口和主窗口

private void CloseAllActiveForms(Form[] MdiChildren) 
     { 
      Form[] childArray = MdiChildren; 
      foreach (Form childform in childArray) 
      { 
       childform.Close(); 
      } 
     } 

我怎麼能在WPF窗口使用?

我嘗試下面的代碼,但它會關閉所有的窗口,包括家長和活動窗口。

private void CloseAllWindows() 
     { 
      for (int intCounter = App.Current.Windows.Count - 1; intCounter >= 0; intCounter--) 
      { 
       Application.Current.Windows[intCounter].Close(); 
      } 
     } 

謝謝。

回答

4

據我所知,WPF MDI的支持是有限的,所以儘量在您創建僞子窗口使用標籤屬性:

Window child = new Window(); 
child.Tag = "mdi_child"; 

然後,在你的循環,修改如下:

foreach (Window win in App.Current.Windows) 
    { 
     if (!win.IsFocused && win.Tag.ToString() == "mdi_child") 
     { 
      win.Close(); 
     } 
    } 

注意,對於上述方案的工作,所有窗口必須有一個標籤屬性,否則,則將會在拋出「win.Tag.ToString()」

+0

是否有使用MDI旁邊的選擇嗎? – kyusan93

+0

MDI風格的應用程序都「出去的風格,」所以這是一種爲什麼WPF支持下降的原因。你的應用程序的目標是什麼? –

+0

基於MDI的應用程序最常見的替代方法是基於選項卡的界面。子窗口變成標籤,並且所有標籤都存在於同一個窗口中。對不起,以前的評論很難回答你的問題。 –

1

這是一個方法,我我們E在WPF關閉我的程序的所有子窗口,這一代碼進入主window.cs文件,但如果你可以修改來檢查特定的窗口(項目=這個!):

沒有與子類或更多的列表(尤其是因爲代碼已經有一個與其關聯的窗口列表)虛假四處張望

如果你想有選擇地關閉窗口,那麼你總是可以修改if語句以使用變量窗口類或檢查所述基極窗口類的預先存在的變量(如類的父窗口的)中的一個