2011-04-22 49 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> 

你說的是在其中應該不存在重複的上下文菜單的情況下?