C# WPF:templated ListBox项中的ContextMenu(InvalidCastException)
我正在尝试向ListBoxItem添加上下文菜单。我使用ListBox.ItemTemplate和DataTemplate(带有网格)来定义项的布局,并且ListBoxItem被设置为样式 在搜索中,这应该是一条路:C# WPF:templated ListBox项中的ContextMenu(InvalidCastException),c#,wpf,xaml,contextmenu,C#,Wpf,Xaml,Contextmenu,我正在尝试向ListBoxItem添加上下文菜单。我使用ListBox.ItemTemplate和DataTemplate(带有网格)来定义项的布局,并且ListBoxItem被设置为样式 在搜索中,这应该是一条路: <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="ContextMenu"> <S
<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.MenuItem到类型
System.Windows.Controls.Grid 我尝试将关联菜单添加到
ItemTemplate
中的网格中,但只有当您单击网格中的一个元素(有一些空白)时,关联菜单才起作用(或者如果我向网格中添加背景,但它会覆盖/覆盖项目本身的悬停和选定样式)
在搜索时,我找不到任何类似的问题,也找不出异常的逻辑。您可以通过将
上下文菜单定义为资源来克服这一问题:
<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>
...
使用TargetType=“ListBoxItem”
代码字符串。因为编码语言需要知道列表框 你可以发布ItemTemplate的代码吗?不知道你的意思!我使用的是'TargetType=“ListBoxItem”———这很有效!谢谢你知道为什么它没有以另一种方式工作吗(我发现的所有样本都是这样做的)?