показывать контекстное меню только на tabcontrol - PullRequest
1 голос
/ 22 апреля 2011

Я пытаюсь добавить контекстное меню, в котором есть «Закрыть» и «Закрыть все, кроме этого», как в IE8.Это меню должно отображаться, когда я нажимаю на вкладку, но не на tabitem.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

Полагаю, вы хотите, чтобы ContextMenu отображалось только , когда пользователь нажимает на заголовок TabItem, а не на область содержимого TabControl.

Если это так, вы можете определить шаблон для заголовка. Смотрите пример кода ниже.

Примечание:
- Контекстное меню появится только при нажатии на текстовую часть (а не на оставшуюся часть пустой области) заголовка TabItem. Если вы хотите использовать всю область заголовка вкладки, вам нужно изменить шаблон ControlTemplate для TabItem.

Пример кода:

<Window x:Class="WpfApplication4.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <DataTemplate x:Key="tabHeaderTemplate">
            <ContentPresenter Width="Auto" Content="{TemplateBinding Content}">
                <ContentPresenter.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Close Tab" />
                        <MenuItem Header="Close Other Tabs" />
                        <Separator />
                        <MenuItem Header="New Tab" />
                    </ContextMenu>
                </ContentPresenter.ContextMenu>
            </ContentPresenter>
        </DataTemplate>
    </Window.Resources>
    <Grid>
        <TabControl>
            <TabItem Header="Tab 1"
                     HeaderTemplate="{StaticResource tabHeaderTemplate}">
                    <Label>Data for first Tab goes here</Label>
            </TabItem>
            <TabItem Header="Tab 2"
                     HeaderTemplate="{StaticResource tabHeaderTemplate}">
                <Label>Data for second Tab goes here</Label>
            </TabItem>
            <TabItem Header="Tab 3">
                <Label>Data for third Tab goes here</Label>
            </TabItem>
        </TabControl>
    </Grid>
</Window>
1 голос
/ 22 апреля 2011

Это то, что вам нужно:
TabContextMenu

Код:

 <TabControl Margin="28,25,57,38" Name="tabControl1">
        <TabItem Header="tabItem1" Name="tabItem1">
            <TabItem.ContextMenu>
                <ContextMenu Name="ct1" >
                    <MenuItem Name="Item1" Header="Close"/>
                    <MenuItem Name="Item2" Header="CloseOtherThankThis" />
                </ContextMenu>
            </TabItem.ContextMenu>
            <Grid>
                <Label Margin="41,75,22,64" Name="label1">First Tab</Label>
            </Grid>
        </TabItem>
        <TabItem Header="tabItem2" Name="tabItem2">
            <TabItem.ContextMenu>
                <ContextMenu Name="ct2">
                        <MenuItem Name="Item3" Header="Close"/>
                        <MenuItem Name="Item4" Header="CloseOtherThankThis" />
                </ContextMenu>
            </TabItem.ContextMenu>
                 </TabItem>
    </TabControl>

Вы говорите о случае, когда не должно быть дублирующегося контекстного меню?

...