WPF:模板化的ListBox项中的ContextMenu(InvalidCastException)

问题描述 投票:1回答:1

我正在尝试将上下文菜单添加到ListBoxItem。我正在使用ListBox.ItemTemplate和DataTemplate(带有网格)来定义项目的布局,并对ListBoxItem进行样式设置。

在搜索中,这应该是一种方法:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="ContextMenu">
            <Setter.Value>
                <ContextMenu>
                    <MenuItem Header="Rename" Click="Rename_Click" />
                </ContextMenu>
            </Setter.Value>
        </Setter>
    </Style>
</ListBox.ItemContainerStyle>

但是这会抛出XamlParseException/InvalidCastException的说法

无法投射类型为键入System.Windows.Controls.MenuItemSystem.Windows.Controls.Grid

我尝试将上下文菜单添加到ItemTemplate的网格中,但是只有当您单击网格中的一个元素(有一些空白)(或者如果我向网格中添加背景时,它才起作用) ,但这会覆盖/“覆盖”项目本身的样式(对于悬停和选中的样式))

我在搜索时找不到任何类似的问题,也无法弄清楚异常的逻辑。。

c# wpf xaml contextmenu
1个回答
0
投票

您可以通过将ContextMenu定义为资源来克服此问题:

    <ListBox>
        <ListBox.Resources>
            <ContextMenu x:Key="cm">
                <MenuItem Header="Rename" Click="Rename_Click" />
            </ContextMenu>
        </ListBox.Resources>
        <ListBox.ItemTemplate>
            ...
        </ListBox.ItemTemplate>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="ContextMenu" Value="{StaticResource cm}" />
            </Style>
        </ListBox.ItemContainerStyle>
    </ListBox>
© www.soinside.com 2019 - 2024. All rights reserved.