在xaml中更改上下文菜单

时间:2015-03-30 10:12:12

标签: wpf xaml

我有一个视图,其中两个大的上下文菜单被定义为resouces。他们看起来像这样(只有更大):

<ContextMenu x:Key="ContextMenu1">
        <MenuItem Header="Append" Command="{Binding AppendCommand}" />
        <MenuItem Header="Edit" Command="{Binding AppendCommand}" />
    </ContextMenu>

    <ContextMenu x:Key="ContextMenu2">
        <MenuItem Header="Delete" Command="{Binding DeleteCommand}" />
        <MenuItem Header="Verify" Command="{Binding VerifyCommand}" />
    </ContextMenu>

我知道我可以使用命令的canExecute方法动态显示/隐藏项目。但由于这是两个完全不同的模式,我想绑定到bool属性,决定显示哪个上下文菜单。像这样:

<ListView ContextMenu={binding ContextMenuSelector}>

有谁知道我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

考虑使用DataTemplateSelector

DataTemplateSelector使您可以根据itemscontrol中每个datacontext项的上下文显示特定的演示文稿。

我已经将它用于可能会有不同行为的上下文菜单项。

答案 1 :(得分:1)

我从DataTemplateSelector得到了一些好主意,但我最后得到了一个带数据触发器的样式:

 <Style TargetType="{x:Type StackPanel}" x:Key="stackPanelStyle">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=AppendMode}" Value="True">
                <Setter Property="ContextMenu" Value="{DynamicResource PanelContextMenuAttachFile}"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=AppendMode}" Value="False">
                <Setter Property="ContextMenu" Value="{DynamicResource PanelContextMenu}"></Setter>
            </DataTrigger>

        </Style.Triggers>
    </Style>