контекстное меню заголовка wpf tabitem - PullRequest
4 голосов
/ 11 июня 2011

Как мне добавить контекстное меню в wpf tabitem, которое появляется только когда я нажимаю на заголовок tabitem, а не на его содержимое?Мне также нужно динамически создавать табитемы в .cs, так что статически делать это в .xaml не получится.

Я попытался добавить контекстное меню в tabitem.header, но у меня есть некоторые проблемы, где, если у меня есть [tabitem1] [tabitem2] [tabitemtabitemtabitemta]

[tabitem2] растягивается, чтобы соответствовать ширине tabcontrol.любая помощь будет оценена.

Спасибо!

1 Ответ

7 голосов
/ 29 октября 2011

См. этот вопрос о том, как это сделать программно.Хитрость заключается в том, чтобы установить 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>
...