我想用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>
.
.
.
知道如何做到这一点吗?
答案 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}"/>