2009-12-08 8 views
23

¿Cómo configuro el TabItem.Header en enlaces tomados de pocos campos, cada enlace se muestra en un tamaño diferente, todo en el lugar del texto del encabezado original ; sin anular el estilo y el comportamiento predeterminados del encabezado, solo necesito el texto.TabControl.ItemTemplate: establezca TabItem.Header.Text en un enlace múltiple con StringFormat

Traté de establecer su plantilla pero luego crea un rectángulo que contiene los controles internos, y este rectángulo no responde a los clics del usuario, y también tiene el estilo de control, quiero que estos controles sean invisibles, solo su el texto debe ser visible.

He intentado lo siguiente:

<TabControl ItemsSource="{Binding}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TabItem> 
       <TabItem.Header> 
        <MultiBinding StringFormat="{}{0}-{1}"> 
         <Binding Path="Title"/> 
         <Binding Path="Category.Title"/> 
        </MultiBinding> 
       </TabItem.Header> 
       <TabItem.Content> 
        <TextBlock> 
         Here is what is gonna be in the TabItem - not header 
        </TextBlock> 
       </TabItem.Content> 
      </TabItem> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
</TabControl> 

Pero no muestra nada.

También intenté configurar HeaderTemplate en una plantilla de datos, pero lo que sucede es que DataTemplate reemplaza el estilo de TabItem y cuando hago clic en el texto no va a la pestaña, además las pestañas no seleccionadas se ven muy gracioso, veo el rectángulo del texto flotando, mientras quiero que sea transparente.

Por lo tanto, para resumir mi pregunta, quiero establecer TabItem.Header.Text a un enlace múltiple con StringFormat.

+3

Di casi la misma respuesta a esta pregunta horas antes. Pero parece que la pregunta fue eliminada y publicada? – Dabblernl

+0

¿Por qué eliminaste la versión anterior de esta pregunta? ¿Por qué no simplemente cambias lo que estás preguntando y dejas comentarios al respecto, y luego dejas que las respuestas sepan que han pasado por alto la marca, el verso destrozando el trabajo? –

Respuesta

61

TabControl contiene una propiedad ContentTemplate así como la ItemTemplate que hereda de ItemsControl. Utiliza ContentTemplate para diferenciar lo que se muestra en el área de Contenido mientras que ItemTemplate define la plantilla para el Encabezado. Además, cada elemento de su ItemSource se ajustará automáticamente en un TabItem; no es necesario que se vuelva a crear en ItemTemplate, ya que eso intentará colocar un TabItem dentro del Encabezado cuando lo note.

En lugar de volver a crear un TabItem dentro de ItemTemplate, utilice ItemTemplate para definir su contenido de encabezado y ContentTemplate para definir su contenido.

<TabControl ItemsSource="{Binding}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock> 
       <TextBlock.Text> 
        <MultiBinding StringFormat="{}{0}--{1}"> 
         <Binding Path="Title" /> 
         <Binding Path="Category.Title" /> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding MyContent}" /> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

En el primer párrafo mencionó que desea establecer diferentes tamaños en las porciones del Encabezado. Si desea hacer eso, no podrá usar un único enlace o enlace múltiple para establecer el texto como se hizo arriba. En su lugar, puede anidar TextBlocks para lograr esto con diferentes formatos para cada uno.

<TabControl.ItemTemplate> 
    <DataTemplate> 
     <TextBlock> 
      <TextBlock Text="{Binding Title}" 
         FontSize="12" /> 
      <Run Text="--" /> 
      <TextBlock Text="{Binding Category.Title}" 
         FontSize="10" /> 
     </TextBlock> 
    </DataTemplate> 
</TabControl.ItemTemplate> 
+0

¿Cuáles son los Style TargetTypes para estos? Sé que TabItem es para el botón, pero ¿qué hay de la página? – Patrick

+0

Eso fue realmente algo muy complicado de abordar. +1 –

Cuestiones relacionadas