我正在尝试将上下文菜单添加到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
的网格中,但是只有当您单击网格中的一个元素(有一些空白)(或者如果我向网格中添加背景时,它才起作用) ,但这会覆盖/“覆盖”项目本身的样式(对于悬停和选中的样式))
我在搜索时找不到任何类似的问题,也无法弄清楚异常的逻辑。。
您可以通过将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>