仅在tabcontrol上显示上下文菜单

时间:2011-04-22 09:27:51

标签: wpf tabcontrol

我正在尝试添加一个上下文菜单,其中包含“关闭”和“关闭所有这些”,就像在IE8中一样。 单击选项卡但不在tabitem上时,应显示此菜单。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这是你需要的:
 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>

您是在谈论应该没有重复上下文菜单的情况吗?

答案 1 :(得分:1)

我相信当用户点击TabItem的标题而不是TabControl的内容区域时,您希望ContextMenu仅显示

如果是,您可以为Header定义模板。请参阅下面的示例代码。

注意:
- 仅当您单击TabItem标题的文本部分(而不是空白区域的其余部分)时,才会出现“上下文”菜单。如果需要整个Tab Header区域,则需要修改TabItem的ControlTemplate。

示例代码:

<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>