我有一个Listbox,开始时没有任何项目。当用户使用GUI从组合框中选择值并单击添加按钮时,列表框将添加一个项目。列表框还有一个上下文菜单集。
如何在列表框中没有项目的情况下使用XAML确保将Listbox.contextmenu.Visibility属性设置为隐藏?
更新
我实际上最终使用了这段代码。请评论其适当性
<Style TargetType="ListBox">
<Style.Resources>
<ContextMenu x:Key="cm">
<MenuItem Header="Buy"/>
<MenuItem Header="Sell"/>
</ContextMenu>
</Style.Resources>
<Setter Property="ContextMenu" Value="{StaticResource cm}"/>
<Style.Triggers>
<Trigger Property="ListBox.HasItems" Value="False">
<Setter Property="ContextMenu.Visibility" Value="Hidden"/>
</Trigger>
</Style.Triggers>
</Style>
答案 0 :(得分:6)
我不认为弄乱ContextMenu的可见性是个好主意,如果列表为空,只需null
整个菜单。
e.g。
<Style TargetType="{x:Type ListBox}">
<Style.Resources>
<ContextMenu x:Key="cm">
<!-- Menu here -->
</ContextMenu>
</Style.Resources>
<Setter Property="ContextMenu" Value="{StaticResource cm}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Items.Count, RelativeSource={RelativeSource Self}}" Value="0">
<Setter Property="ContextMenu" Value="{x:Null}" />
</DataTrigger>
</Style.Triggers>
</Style>
您也可以选择仅使用ItemContainerStyle
在项目本身上定义ContextMenus,然后在没有项目的情况下不能打开ContextMenu,但这当然不适合您的场景。