2011-04-22 48 views
1

我想添加一个上下文菜单,具有“关闭”和“关闭所有,但这个”像在IE8中。 当我点击选项卡而不是tabitem时,应该显示这个菜单。只显示上下文菜单tabcontrol

我该怎么做?

+0

“当我点击选项卡上,但不是的TabItem”那是什么意思? – 2011-04-22 13:32:43

回答

1

我相信你希望ContextMenu出现只有当用户点击TabItem的标题而不是TabControl的内容区域。

如果是这样,您可以为Header定义一个模板。请参阅以下示例代码。

注:
- 右键菜单将只有当你点击的TabItem标题的文本部分(而不是空白区域的其余部分)出现。如果您需要整个Tab标题区域,则需要修改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> 
+0

这会导致stackoverflowexception – user156144 2011-04-25 00:00:17

+0

@ user156144,stackoveflowexception由于此代码?奇怪。 :)。无论如何,这只是一个例子,你可能想用TextBlock或其他东西替换contentPresenter,或者可能想要为整个ControlTemplate提供TabItem方法。 – publicgk 2011-04-25 11:19:59

+0

我的不好...内容='{TemplateBinding内容}“>给了我一个构建错误,所以我取代了整个内容属性。用Control.Content或其他东西(我不记得)重新插入它解决了这个问题。 – user156144 2011-04-25 15:30:14

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> 

你说的是在其中应该不存在重复的上下文菜单的情况下?