См. этот вопрос о том, как это сделать программно.Хитрость заключается в том, чтобы установить ContextMenu на любой элемент управления, который вы указали в качестве содержимого заголовка.Если вы просто используете заголовок для установки простого строкового значения, это не сработает.Как минимум, вам нужно создать TextBlock или ContentControl или что-то в этом роде.
Для тех, кому интересно, как это сделать с помощью XAML (особенно при использовании шаблона MVVM):
УстановитьContextMenu на ItemContainerStyle TabControl.Затем он будет применяться только к фактической части вкладки (заголовку), а не к содержимому вкладки.Вы можете использовать привязки и тому подобное в MenuItems, чтобы получить различное поведение в зависимости от конкретной вкладки, при условии, что ваша вкладка использует ViewModel.
<TabControl>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu/> <!-- Define it here! -->
</Setter.Value>
</Setter>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>