提示/想法如何获得通用上下文菜单?

时间:2013-03-11 12:49:06

标签: c# .net wpf mvvm contextmenu

我想用wvf在wpf中开发一个通用的contextmenu。我想在每个viewModel中显示它,它具有样式的listview:ItemContainerStyle =“{DynamicResource ListViewItemContainerStyle}”。

根据每个视图模型中的一些约束,上下文菜单将有2个选项可以启用或不启用。启用或不启用将由命令的canexecute管理。

如果我把它放在listview中的每个视图中,我没有问题,但我想只在每个listview中的一个地方放置它。我试图将它放在ListViewItemContainerStyle中,但它显示一个异常“它不可能将System.Windows.Controls.ContextMenu添加到System.Object”。这是我的代码片段

<Style x:Key="ListViewItemContainerStyle"
       TargetType="ListViewItem">
   .
   .
   .
    <Setter Property="ContextMenu">
        <Setter.Value>
            <ContextMenu>
                <MenuItem Command="{Binding Path=Command}"
                          CommandParameter="AddNew">
                    <MenuItem.Header>
                        <TextBlock Text="{x:Static p:TextResources.New}" />
                    </MenuItem.Header>
                </MenuItem>
                <MenuItem Command="{Binding Path=Command}"
                          CommandParameter="Delete">
                    <MenuItem.Header>
                        <TextBlock Text="{x:Static p:TextResources.Delete}" />
                    </MenuItem.Header>
                </MenuItem>
            </ContextMenu>
        </Setter.Value>
    </Setter>
 .
 .
 .

知道如何做到这一点吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

<ContextMenu x:Shared="False" x:Key="ListViewContextMenu>
                <MenuItem Command="{Binding Path=Command}"
                          CommandParameter="AddNew">
                    <MenuItem.Header>
                        <TextBlock Text="{x:Static p:TextResources.New}" />
                    </MenuItem.Header>
                </MenuItem>
                <MenuItem Command="{Binding Path=Command}"
                          CommandParameter="Delete">
                    <MenuItem.Header>
                        <TextBlock Text="{x:Static p:TextResources.Delete}" />
                    </MenuItem.Header>
                </MenuItem>
            </ContextMenu>

<Style x:Key="ListViewItemContainerStyle"
       TargetType="ListViewItem">
    <Setter Property="ContextMenu" Value="{StaticResource ListViewContextMenu}"/>