wpf - Wpf,C# - TabItem 标题中的上下文菜单
问题描述
我想为 tabitem 添加一个上下文菜单。但它只能通过单击选项卡的标题打开
if (!(View.tabContent.Items[View.tabContent.SelectedIndex] is TabItem tabItem))
return;
ContextMenu ctm = new ContextMenu();
MenuItem m1 = new MenuItem();
m1.Header = "a";
m1.Click += M1_Click;
MenuItem m2 = new MenuItem();
m2.Header = "b";
m2.Click += M2_Click;
ctm.Items.Add(m1);
ctm.Items.Add(m2);
TabControl tbc = View.tabContent;
tbc.ContextMenu = ctm;
解决方案
将每个 TabItem 替换Header
为包含该标题的实际内容的 ContentControl,同时还替换 ContextMenu:
<TabItem>
<TabItem.Header>
<ContentControl Content="FirstTab">
<ContentControl.ContextMenu>
<ContextMenu>
<MenuItem Header="Foo" />
<MenuItem Header="Bar" />
<MenuItem Header="Baz" />
</ContextMenu>
</ContentControl.ContextMenu>
</ContentControl>
</TabItem.Header>
<Grid Background="CornflowerBlue" />
</TabItem>
显然,这也可以完全在代码隐藏中完成,如果您只需要动态菜单,那么您可以像这样声明一个空的 ContextMenu:
<ContentControl Content="FirstTab">
<ContentControl.ContextMenu>
<ContextMenu x:Name="FirstMenu" />
</ContentControl.ContextMenu>
</ContentControl>
...然后在代码隐藏中填充:
FirstMenu.Items.Add(new MenuItem { Header = "Foo" });
FirstMenu.Items.Add(new MenuItem { Header = "Bar" });
FirstMenu.Items.Add(new MenuItem { Header = "Baz" });
推荐阅读
- c - 用逗号分割不能按预期工作
- python-3.x - 为什么说这两个值不一样?
- swift - Snapkit centerY 约束将项目居中于中心 Y 轴上方
- powershell - 尝试将具有特定日期的文件从文件夹复制到具有镜像文件夹结构的另一个位置
- c# - 派生类中可以使用虚方法
- json - 对集合资源的响应负载正文的建议
- laravel - 将 Laravel Echo 与 docker 一起使用(CORS 问题)
- java - 使用 JSONObject 显式声明可空字段的类型
- laravel - 选择带有返回重复项的选定值的选项
- concourse - 如何有条件地运行 Concourse 任务?