c# - 将事件处理程序添加到 ResourceDictionary 内的 ContextMenu 内的 MenuItem
问题描述
我有一个TreeView
, 和一个ResourceDictionary
, 包含一个ContextMenu
, 和(当前)一个MenuItem
. (我稍后会添加更多MenuItem
。)
我正在尝试通过 C# 代码隐藏添加一个事件。我知道想要通过代码隐藏而不是仅仅在 XAML 中指定它有点奇怪,但这是我需要为其他要求做的事情。
所以,我的层次结构是:
Window
(没有名字/钥匙)Grid
(没有名字/钥匙)TreeView
(命名为树视图)ContextMenu
(键入 allRequirementGroupsMenu)MenuItem
所以,现在我转到代码隐藏,我可以在这个层次结构中导航,我可以添加事件处理程序。
通过代码隐藏有更好的方法吗?
代码隐藏
var contextmenu = treeView.TryFindResource("allRequirementGroupsMenu") as ContextMenu;
var mnu_create_reqgrp = contextmenu.Items.OfType<MenuItem>()
.FirstOrDefault(item =>
item.Name == "mnuItem_CreateRequirementGroup");
if(mnu_create_reqgrp != null)
mnu_create_reqgrp.Click += RequirementGroup_Create_Click;
XAML
<Window x:Class="MyApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MyApp"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="1600">
<Grid>
<TreeView x:Name="treeView">
<TreeView.Resources>
<ResourceDictionary>
<ContextMenu x:Key="allRequirementGroupsMenu"
StaysOpen="True">
<MenuItem Header="Create Requirement Group"
Name="mnuItem_CreateRequirementGroup" />
</ContextMenu>
</ResourceDictionary>
</TreeView.Resources>
<TreeViewItem Header="Vendors"
ItemsSource="{Binding Vendors}" />
<TreeViewItem Header="Checklists"
ItemsSource="{Binding Checklists}" />
<TreeViewItem Header="Requirement Groups"
ItemsSource="{Binding RequirementGroups}"
ContextMenu="{StaticResource allRequirementGroupsMenu}" />
<TreeViewItem Header="Ungrouped Items"
ItemsSource="{Binding UngroupedItems}" />
</TreeView>
</Grid>
</Window>
解决方案
推荐阅读
- boolean - 如何在表单加载的表中将是/否值设置为否以注销所有用户
- c++ - 任何人都可以像我 5 岁那样解释变量如何在函数上工作吗?
- android - 为什么 ppoll() 不等待我在 Android Pie 中的延迟?
- python - Pandas:读取 CSV 时出现强制错误
- scala - scala中错误的顶级声明声明
- visual-studio-code - 如何关闭 ESLint 规则以便代码编译?
- python - 如何为 pandas.cut 函数定义(和命名)间隔?
- python - 从另一个文件导入变量会产生错误
- google-apps-script - 将值从活动工作表复制到另一个工作表
- python - 错误; 字符串索引必须是整数,很确定值是整数