触发ContextMenu可见性?

时间:2011-06-24 18:51:04

标签: wpf xaml triggers contextmenu

我有一个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>

1 个答案:

答案 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,但这当然不适合您的场景。