2011-01-18 6 views
8

ho un TabControl controlloTabItems Aggiunta dinamicamente

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

Nel codice dietro aggiungo alcune schede dinamicamente al TabControl come segue:

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); 
} 

dove VillageUserControl è un UserControl che trattano il specificata villaggio. Questo codice funziona correttamente e ottiene i risultati previsti ...

Il problema è che non voglio che questo sia nel codice sottostante ma solo nello stesso xaml.

provo questo:

<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> 

Dopo l'eseguo, viene generata un'eccezione: "elemento specificato è già il figlio di un altro elemento logica Scollegare per primo."

Mi sono perso qualcosa? Per favore aiutami qui ...

risposta

12

Hai impostato la cosa sbagliata, non dovresti modificare lo ItemContainerStyle ma lo TabControl.ItemTemplate per l'intestazione e TabControl.ContentTemplate per il contenuto.

(L'eccezione può avere a che fare con il fatto che nello stile viene creato un solo VillageUserControl, ma lo stile si applica a più elementi scheda.)

+0

sì, Grazie HB da tutto il mio cuore. .. –

+0

Prego, lieto che abbia aiutato :) (Una nota a margine: puoi contrassegnare le risposte tramite il segno di spunta che appare se sposti il ​​mouse sotto i voti a sinistra, finora non hai accettato alcuna risposta a le tue domande, potresti volerle passare e accettare la risposta che ha maggiormente aiutato) –

+0

sì, l'ho fatto, davvero è una buona sito web.. –

3

Ora si sta lavorando:

<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> 
Problemi correlati