2011-01-18 2 views
8

IがIコードビハインドで次のように動的にTabItems

<TabControl Name="Farms_myVillages" 
      ItemsSource="{Binding Villages}"> 
</TabControl/> 

TabControl制御を有するがTabControlに動的にいくつかのタブを追加追加:

VillageUserControlは、指定された対処 UserControlある
foreach (Village vill in Villages) 
{ 
    TabItem tab = new TabItem(); 
    tab.Header = vill.Name; 
    VillageUserControl c = new VillageUserControl(); 
    c.DataContext = vill; 
    tab.Content = c; 
    Farms_myVillages.Items.Add(tab); 
} 

を村。このコードは正常に動作し、期待される結果が得られます。

問題は、これがコードの背後にあるのではなく、ちょうどxamlにあることです。

私はこれを試してみてください。私はそれを実行

<TabControl Name="Farms_myVillages" 
      ItemsSource="{Binding Villages}"> 
     <TabControl.ItemContainerStyle> 
      <Style TargetType="TabItem"> 
       <Setter Property="Header" Value="{Binding Name}"/> 
       <Setter Property="Content"> 
       <Setter.Value> 
        <u:VillageUserControl DataContext="{Binding}"/> 
       </Setter.Value> 
       </Setter> 
      </Style> 
     </TabControl.ItemContainerStyle> 
</TabControl> 

した後、それが例外をスローします:「指定された要素がすでに別の要素の論理的な子で最初にそれを外します。。」

私は何かを見逃しましたか?ここをクリックしてください...

答えて

12

あなたは間違ったことを設定しましたが、ItemContainerStyleではなく、TabControl.ItemTemplate(ヘッダー)とTabControl.ContentTemplate(内容)を変更してください。

(例外はスタイルで一つだけVillageUserControlが作成されているという事実としなければならないかもしれませんが、スタイルは複数のタブ項目に適用されます。)の背後にあるコードでこれを持っていないの

+0

をはい、すべて私の心からあなたにHBをありがとうございます。 .. –

+0

あなたが歓迎してくれてありがとうございました:)(サイドノートでは、マウスを左の票の下に移動すると表示されるチェックマークのアウトラインで回答をマークできます。あなたの質問は、あなたがそれらを通過し、最も助けた答えを受け入れることがあります) –

+0

はい私はそれをした、本当に良いですウェブサイト.. –

3

今、それが働いている:

<TabControl Name="Farms_myVillages" 
      ItemsSource="{Binding Villages}"> 
     <TabControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Name}"/> 
      </DataTemplate> 
     </TabControl.ItemTemplate> 
     <TabControl.ContentTemplate> 
      <DataTemplate> 
       <u:VillageResources/> 
      </DataTemplate> 
     </TabControl.ContentTemplate> 
</TabControl>