Ответ 1
TabControl содержит свойство ContentTemplate, а также ItemTemplate, которое он наследует от ItemsControl. Он использует ContentTemplate, чтобы отличать то, что отображается в области содержимого, в то время как ItemTemplate определяет шаблон для заголовка. Кроме того, каждый элемент из вашего ItemSource будет автоматически обернут в TabItem; он не нуждается в повторном создании в ItemTemplate, поскольку это попытается поместить TabItem внутри заголовка, как вы заметили.
Вместо повторного создания TabItem внутри ItemTemplate используйте ItemTemplate для определения содержимого заголовка и ContentTemplate для определения вашего содержимого.
<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>
В вашем первом абзаце вы упомянули, что хотите установить разные размеры в связанных частях заголовка. Если вы хотите это сделать, вы не сможете использовать один Binding или MultiBinding, чтобы установить текст так, как это сделано выше. Вместо этого вы можете вставлять TextBlocks для достижения этого с различным форматированием для каждого.
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock Text="{Binding Title}"
FontSize="12" />
<Run Text="--" />
<TextBlock Text="{Binding Category.Title}"
FontSize="10" />
</TextBlock>
</DataTemplate>
</TabControl.ItemTemplate>