我创建了一个上下文菜单,我(目前)将其用于树视图中的某些项目。为此,我创建了一个TreeItem
类,其中包含所有相关信息,如标题、图标、子项、执行目标等。它看起来像这样:
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"
Visibility="{Binding ShowContextMenu}"
ItemsSource="{Binding ContextMenu}">
<ContextMenu.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Header}" />
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command"
Value="{Binding Execute}" />
<Setter Property="Icon"
Value="{StaticResource cmIcon}" />
<Setter Property="ToolTip"
Value="{Binding ToolTip}" />
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
</HierarchicalDataTemplate>
</ContextMenu.ItemTemplate>
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command"
Value="{Binding Execute}" />
<Setter Property="Icon"
Value="{StaticResource cmIcon}" />
<Setter Property="ToolTip"
Value="{Binding ToolTip}" />
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
当我仅在树视图中使用上下文菜单时,它被附加到 ItemTemplate 中的 TextBlock。但现在我想为不同的控件使用相同的上下文菜单。由于我不想将相同的代码复制到不同的位置并多次维护它,我想将它重用为模板。我尝试了两件事:
我将上下文菜单放在用户控件的资源中(仅用于测试)并像这样调用它:
<TextBlock Text="{Binding Header}" ContextMenu="{StaticResource myContextMenu}">
. 它会显示,但不会关闭,也不会移动。无论如何,这也不是很有帮助,因为我想在不同的用户控件上使用上下文菜单。然后我将上下文菜单放在 App.xaml: 中的控件模板中
<ControlTemplate x:Key="TreeContextMenu" TargetType="ContextMenu">
。我这样称呼它:<TextBlock.ContextMenu> <ContextMenu Template="{StaticResource TreeContextMenu}"/> </TextBlock.ContextMenu>
程序启动,但是当我想打开上下文菜单时,出现异常:'ContextMenu' cannot have a logical or visual parent.
我试图用谷歌搜索解决方案,但找不到任何有用的东西。