我在DataGrid上使用上下文菜单 我希望每个项目都会显示右键单击的实体的上下文菜单项。 在没有实体的情况下,上下文菜单项列表将为空,因此在这种情况下,我不希望具有空项的用户可以看到上下文菜单。 (我在空矩形上看到会让用户感到困惑)。
我的代码如下:
<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>
当我使用它时,我得到例外:
“PresentationFramework.dll中发生了'System.InvalidOperationException'类型的未处理异常
其他信息:在使用ItemsSource之前,项目集合必须为空。“
为什么会这样,我该如何解决?
答案 0 :(得分:3)
在ContextMenu
标记下放置<ContextMenu.Style>
样式:
<ContextMenu Name="cm" ItemsSource="{Binding DemoInstance.ContextMenuItems}"
ItemContainerStyle="{StaticResource demo2Style}" >
<ContextMenu.Style>
<Style TargetType="{x:Type ContextMenu}">
<Style.Triggers>
<Trigger Property="HasItems" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
</ContextMenu.Style>
</ContextMenu>
答案 1 :(得分:0)
问题在于您的XAML。您添加了Style
作为ContextMenu
的子项,并且还绑定了它的ItemsSource
属性。 (无法设置两者,请参阅here了解更多信息。)
但是从我的代码中我怀疑你很可能想要这样的东西:
资源部分(demo2Style
所在的位置):
<Style x:Key="myCustomStyle" TargetType="{x:Type ContextMenu}">
<Style.Triggers>
<Trigger Property="HasItems" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
ContextMenu
:
<ContextMenu Name="cm"
ItemsSource="{Binding DemoInstance.ContextMenuItems}"
ItemContainerStyle="{StaticResource demo2Style}"
Style="{StaticResource myCustomStyle}" />