将事件处理程序添加到ResourceDictionary的ContextMenu的MenuItem中

时间:2018-10-29 15:08:29

标签: c# wpf xaml

我有一个TreeView,一个ResourceDictionary,包含一个ContextMenu,(当前)有一个MenuItem。 (我将在以后添加更多MenuItem。)

我正在尝试通过C#代码隐藏为此添加一个事件。我知道想通过代码隐藏而不是仅在XAML中指定代码来执行此操作有点奇怪,但这是我为其他要求所要做的。

所以,我的等级是:

  • Window(无名称/密钥)
  • Grid(无名称/密钥)
  • TreeView(名为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>

0 个答案:

没有答案