提示/想法我如何得到一个通用的上下文菜单

本文关键字:一个 菜单 上下文 何得 提示 | 更新日期: 2023-09-27 18:03:23

我想开发一个通用的上下文菜单在wpf与mvvm。我想显示它在每个viewModel有一个listview的样式:ItemContainerStyle="{DynamicResource ListViewItemContainerStyle}"。

上下文菜单将有2个选项,根据每个视图模型中的一些约束来启用或禁用。是否启用将由命令的可执行性来决定。

我没有问题,如果我把它放在每个视图内的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>
 .
 .
 .

你知道怎么做吗?

提示/想法我如何得到一个通用的上下文菜单

试试这个:

<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}"/>
相关文章: