我在DataGrid上使用上下文菜单。
我希望每个项目都会显示右键单击的实体的上下文菜单项。 如果没有实体,则上下文菜单项列表将为空,因此在这种情况下,我不希望上下文菜单对于具有空项目的用户可见。 (我看到空矩形会混淆用户)。为什么我不能在ContextMenu和ItemsSource上使用“HasItems”属性?
我的代码如下所示:
<ContextMenu Name="cm" ItemsSource="{Binding DemoInstance.ContextMenuItems}"
ItemContainerStyle="{StaticResource demo2Style}" >
<Style TargetType="{x:Type ContextMenu}">
<Style.Triggers>
<Trigger Property="HasItems" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
</ContextMenu>
,当我使用它,我得到异常:
“ 'System.InvalidOperationException' 类型的未处理的异常出现在PresentationFramework.dll
附加信息:在使用ItemsSource之前,项目集合必须为空。“
为什么会发生这种情况,我该如何解决它?
不风格的TARGETTYPE说,这将适用于所有文本菜单?我们是否必须明确地将它包含在ContextMenu.Style中? – LxL
是的。但问题是OP在ContextMenu下添加了样式。理想的样式应该驻留在父元素或根元素资源部分,以便它明确地应用于所有子上下文菜单。 –
现在我明白了。然后我建议删除TargetType,因为在这种情况下它不是必要的,它会欺骗像我这样的人和OP认为它适用于每个ContextMenu。 – LxL