回答
我相信你希望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>
这会导致stackoverflowexception – user156144 2011-04-25 00:00:17
@ user156144,stackoveflowexception由于此代码?奇怪。 :)。无论如何,这只是一个例子,你可能想用TextBlock或其他东西替换contentPresenter,或者可能想要为整个ControlTemplate提供TabItem方法。 – publicgk 2011-04-25 11:19:59
我的不好...内容='{TemplateBinding内容}“>给了我一个构建错误,所以我取代了整个内容属性。用Control.Content或其他东西(我不记得)重新插入它解决了这个问题。 – user156144 2011-04-25 15:30:14
这是你所需要的:
代码:
<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. TabControl上下文菜单
- 2. 在imagegridview上显示上下文菜单
- 3. 显示上下文菜单(标记)
- 4. 在显示上下文菜单CONTENTEDITABLE格
- 5. Android上下文菜单显示在onCreate
- 6. 显示NatTable上下文菜单
- 7. Firefox上下文菜单项不显示
- 8. 显示上下文相关子菜单
- 9. 上下文菜单项不显示
- 10. 显示不同的上下文菜单
- 11. 全屏显示上下文菜单WPF
- 12. Modx Wayfinder不同的上下文菜单只显示刷新后
- 13. 两个上下文菜单分享图标,但只有一个上下文菜单图标显示
- 14. 菜单显示之前的WPF更新上下文菜单项
- 15. 将ToolStripDropDownButton的菜单显示为上下文菜单
- 16. 无法使选项菜单..显示为上下文菜单Android
- 17. 显示菜单在上下文菜单的ExtJS
- 18. StyleCop不再显示“显示帮助”上下文敏感菜单
- 19. TortoiseSVN不会在文件上显示上下文菜单
- 20. 下拉菜单应该只显示显示成员
- 21. 自上而下菜单不显示
- 22. 在iPad上不显示下拉菜单
- 23. 下拉菜单不显示在IE上
- 24. 下拉菜单不显示子菜单
- 25. @media下拉菜单 - 显示菜单
- 26. 在MFC应用程序主机上显示上下文菜单菜单栏
- 27. IntelliJ Idea只在主显示屏上打开主菜单,上下文菜单和自动完成功能
- 28. 文本框的上下文菜单以粗体显示菜单选项
- 29. 铭文显示了下拉菜单
- 30. 为表单输入显示强制上下文菜单
“当我点击选项卡上,但不是的TabItem”那是什么意思? – 2011-04-22 13:32:43