2012-12-06 54 views
0

將usercontrols的集合綁定到TabControl的ItemsSource屬性非常有用。如何在使用ItemsSource時設置TabItem的標頭

但是,一旦你走這條路,似乎很難從代碼中設置每個tabitem的頭。 我可以從xaml 這樣做,但我需要從代碼來完成。

所以,我正在尋找的是沿

TabControl tabControl = new TabControl(); 

tabControl.ItemsSource = collectionOfUserControls; 

tabControl.HeaderPath = "Title" // this property is not available 

編輯

線的東西這是怎麼一個能做到這一點,如果manualy加入到集合中。問題是如何在使用ItemsSource屬性時設置標題。

 var vragenlijsten = new UserControl[] 
           { 
            new UC1() , 
            new UC2(), 
           }; 


     TabControl tabControl = new TabControl(); 

     foreach (var vragenlijst in vragenlijsten) 
     { 
      var tabItem = new TabItem(); 
      tabItem.Content = vragenlijst; 
      tabItem.Header = vragenlijst.GetType(); 
      tabControl.Items.Add(tabItem); 
     } 
+1

爲什麼你需要從代碼中做到這一點?也有一個HeaderTemplate .. –

+0

我喜歡知道如何在代碼中做到這一點:)如果它不是可行的/實際的知識以及 – buckley

+0

當你帶來一個「傳統」的心態,並嘗試在WPF中使用它時,沒有什麼是實際的。實際上,我將TabControl看作IEnumerable的ViewModel,然後在屏幕上以各自的視圖呈現它們。這就是WPF的心態。 –

回答

0

如果必須做在代碼中,你需要檢索TabItem S和設置頁眉爲他們每個人。類似這樣的:

+0

聽起來很合理,但你試過嗎?如果使用ItemsSource綁定,則會發現投射Items集合的項目不是TabItem。 – buckley

+0

我試過了。我的答案假定你的'collectionOfUserControls'是'TabItem'的集合。如果你有更多的控件不是TabItem(儘管我不知道你爲什麼會這麼做),你可以在之前添加一個檢查,如:if(tabControl.Items [0]是TabItem)。 – dzavala