在ListView中,为每个ListViewItem动态添加一个ContextMenu?

3
我目前在ListView上设置了视图样式为“GridView”的ContextMenu。但是,这给我带来了麻烦,因为你也可以右键单击ListView顶部的可视列来出现上下文菜单。
我只想让上下文菜单出现在列表中的所有项目上,而且我不想为每个列表编写一个新的上下文菜单方法。
有没有聪明的方法来解决这个问题?也许通过某种模板?哪种方法是最好的?
2个回答

8

您可以创建一个样式,应用于列表视图中的项目,而不是列表视图本身。例如:

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="Send Email" />
                        <MenuItem Header="Delete" />
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

3

作为参考,我尝试了这种方法,但总是出现错误:

A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll

Additional information: Cannot add content of type 'System.Windows.Controls.ContextMenu' to an object of type 'System.Object'.  Error at object 'System.Windows.Controls.ContextMenu' in markup file '<file>'.

相反,我不得不使用静态资源,虽然结果完全相同,但却有效。想象一下。

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="ContextMenu" Value="{StaticResource ListViewContextMenu}" />
    </Style>
</ListView.ItemContainerStyle>

<Application.Resources>
    <ContextMenu x:Key="ListViewContextMenu">
        <MenuItem Header="Play" />
    </ContextMenu>
</Application.Resources>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接