2010-06-12 63 views
0

我寧願使用MEF並計劃使用它構建演示應用程序以加載不同的選項卡。我是MEF和WPF的開端,儘管MEF正在加載程序集,但我仍然無法將控件加載到已創建的TabItem中。我的代碼看起來像這樣一個BT ..使用MEF動態構建選項卡式應用程序

  foreach (var page in pages) 
      { 
       TabItem item = new TabItem(); 
       item.Header = page.PageTitle; 

       /// Errm??? 

       // Add each page 
       tcPageControl.Items.Add(item); 
      } 

的選項卡頁面,所以我可能會做這完全錯了,任何幫助,將不勝感激。

在此先感謝

+0

你能發佈一個更完整的代碼示例嗎?如果你包括你如何導入和導出那些真正幫助我們的零件。 – 2010-06-12 23:25:40

+0

不是真正的MEF問題 - 更多的是如何在WPF中動態設置可視元素的問題,正如您所說的應用程序正在加載程序集。 – Robaticus 2010-06-12 23:45:49

回答

1

不具備智能感知功能,但我認爲您需要將該項目的內容設置爲您的頁面。喜歡的東西:

foreach (var page in pages) 
    { 
     TabItem item = new TabItem(); 
     item.Header = page.PageTitle; 

     item.Children.Add(page); 
     //or item.Grid.Children.Add(page) or something like that. 

     // Add each page 
     tcPageControl.Items.Add(item); 
    } 
0

不會有太多的細節在這裏 - 但基本的想法是[Export]每「頁」,潛在內的自定義類,讓你的網頁標題等

你然後使用[ImportMany]導入頁面集合,併爲每個導入的頁面構建一個「選項卡」。

+0

這一點我認爲是工作,在每個頁面的內容添加到失敗的控制。 – Mmarquee 2010-06-13 09:03:11

0

你只需要設置你的TabItem的Content屬性是頁面,如下所示:

foreach (var page in pages) 
{ 
    TabItem item = new TabItem(); 
    item.Header = page.PageTitle; 

    item.Content = page; 

    tcPageControl.Items.Add(item); 
} 

這裏是一個更優雅的方式使用LINQ的代碼吧:

tcPageControl.ItemsSource = 
    from page in pages 
    select new TabItem 
    { 
    Header = page.PageTitle, 
    Content = page, 
    }; 

一般來說,在WPF中,如果您正確構造代碼,則永遠不必編寫「foreach」循環。

0

我解決了我的問題,頁面只能有框架作爲他們的父母,因此添加此代碼可解決它。

  foreach (var page in pages) 
      { 
       TabItem item = new TabItem(); 
       item.Header = page.PageTitle; 

       // Now add some controls 

       Frame frame = new Frame(); 

       frame.Content = page.View; 

       item.Content = frame; 

       // Add each page 
       tcPageControl.Items.Add(item); 

       //tcPageControl.Children.Add(view.Value); 
      } 
相關問題