wpf binding header tabcontrol tabitem

wpf - TabControl.ItemTemplate: establece TabItem.Header.Text en un MultiBinding con StringFormat



(1)

¿Cómo configuro el TabItem.Header a los enlaces tomados de algunos campos, cada enlace se muestra en un tamaño diferente, todo en lugar del texto del encabezado original; Sin anular el estilo y el comportamiento predeterminados del encabezado, solo necesito el texto.

Intenté 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 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 he intentado configurar HeaderTemplate como DataTemplate, pero lo que sucede es que DataTemplate anula el estilo TabItem y cuando hago clic en el texto no va a la pestaña en la que se hace clic, además, las pestañas no seleccionadas se ven muy divertidas, veo el rectángulo del texto flotante, mientras que yo quiero que sea transparente.

Entonces, para resumir mi pregunta , quiero establecer TabItem.Header.Text en un MultiBinding con StringFormat.


El TabControl contiene una propiedad ContentTemplate, así como el ItemTemplate que hereda de ItemsControl. Utiliza la plantilla de contenido para diferenciar lo que se muestra en el área de contenido mientras que la plantilla de elementos que define la plantilla para el encabezado. Además, cada artículo de su ItemSource se envolverá automáticamente en un artículo de tabla; no es necesario volver a crearlo en ItemTemplate, ya que eso intentará colocar un elemento de tabla dentro del encabezado, como lo notará.

En lugar de volver a crear un elemento de tabla dentro de la plantilla de elementos, use la plantilla de elementos para definir su contenido de encabezado y la plantilla de contenido 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 su primer párrafo mencionó que desea establecer diferentes tamaños en las partes encuadernadas del encabezado. Si desea hacerlo, no podrá utilizar un solo enlace o un enlace múltiple para configurar el texto como se hace arriba. En su lugar, puede anidar TextBlocks para lograr esto con un formato diferente 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>