WPF 以样式声明上下文菜单

WPF Declare ContextMenu in Style

我为 ListViewItemContextMenu 创建了样式,这样当我右键单击 ListViewItem 时,我可以通过 ContextMenu delete/remove ].

<Style x:Key="GridViewCheckoutColumnStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="ContextMenu">
            <Setter.Value>
                <ContextMenu>
                    <MenuItem Header="Remove" Click="ListViewItem_ContextMenuClick"/>
                </ContextMenu>
            </Setter.Value>
        </Setter>
    </Style>

还有我的ListView:

<ListView Name="ListViewCheckoutTable" Margin="20,20,20,0" VerticalAlignment="Top" Height="200" FontSize="14" ItemContainerStyle="{StaticResource GridViewCheckoutColumnStyle}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Quantity" Width="80" DisplayMemberBinding="{Binding Quantity}"/>
            <GridViewColumn Header="Name" Width="150" DisplayMemberBinding="{Binding Name}"/>
            <GridViewColumn Header="Price" Width="70" DisplayMemberBinding="{Binding Price}"/>
        </GridView>
    </ListView.View>
</ListView>

遗憾的是,每当我尝试 运行 时,这段代码都会抛出错误。我收到一个无效的转换异常,说它无法将 MenuItem 转换为 Grid.

我还要说的是我的ListView满满都是MenuItems

public class MenuItem 
{
    public int Quantity { get; set; }
    public int Id { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
}

尝试将 ContextMenu 定义为单独的资源:

<ContextMenu x:Key="contextMenu" x:Shared="False">
    <MenuItem Header="Remove" Click="ListViewItem_ContextMenuClick"/>
</ContextMenu>
<Style x:Key="GridViewCheckoutColumnStyle" TargetType="{x:Type ListViewItem}">
    <Setter Property="ContextMenu" Value="{StaticResource contextMenu}" />
</Style>