2011-01-18 11 views
8

que tienen un control TabControlTabItems Adición dinámica

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

En el código detrás añado un par de pestañas de forma dinámica a la TabControl de la siguiente manera:

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

donde VillageUserControl es una UserControl que tienen que ver con la especificada pueblo. Este código funciona bien y obtiene los resultados esperados ...

El problema es que no quiero que esté en el código de detrás, sino solo en el xaml.

que intento esto:

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

Después de lo ejecuto, se produce una excepción: "elemento especificado ya es el niño lógica de otro elemento Desconectar en primer lugar."

¿Echo de menos algo? Por favor, ayúdame aquí ...

Respuesta

12

configura las cosas mal, no se debe modificar el ItemContainerStyle pero el TabControl.ItemTemplate para el encabezado y TabControl.ContentTemplate para el contenido.

(La excepción puede tener que ver con el hecho de que en el estilo sólo se crea una VillageUserControl, pero el estilo se aplica a varios elementos de la ficha.)

+0

sí, Gracias HB de todo corazón. .. –

+0

De nada, me alegro de que haya sido útil :) (En una nota al margen: puede marcar las respuestas mediante el esquema de marca de verificación que aparece si mueve el mouse debajo de los votos de la izquierda, hasta el momento no ha aceptado ninguna respuesta sus preguntas, es posible que desee revisarlas y aceptar la respuesta que más ayudó) –

+0

sí lo hice, realmente es una buena sitio web ... –

3

Ahora se está trabajando:

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