tet*_*ete 2 wpf contextmenu highlight itemscontrol
我需要设计一个ContextMenu包含一个MenuItem,它MenuItem有一个更深层次的菜单列表,它绑定到ObservableCollection我的 ViewModel类型的属性。代码如下所示:
<ContextMenu DataContext="{Binding PlacementTarget.DataContext,
RelativeSource={RelativeSource Self}}" >
...
<MenuItem Header="Map to account" >
<ItemsControl ItemsSource="{Binding RelatedAccounts}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Number}"
Command="{Binding PlacementTarget.DataContext.MapToAccountCommand,
RelativeSource={RelativeSource AncestorType=ContextMenu}}"
CommandParameter="{Binding}"
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</MenuItem>
...
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)
这个想法是当用户从 UI 中右键单击一个支付项目,然后转到“映射到帐户”菜单项时,将显示更深层次的菜单项并列出所有相关帐户供用户选择(如您可以看到ItemsControl绑定到RelatedAccounts)
一切正常,上下文菜单正确显示了我从 ViewModel 公开的所有相关帐户,当用户右键单击一个帐户时,ViewModel 中的Command属性MapToAccountCommand将使用所选帐户的传递参数执行。
但是有一种我不想要的行为:当鼠标进入比“映射到帐户”菜单更深的一层时,它实际上突出显示了整个菜单项集合。请看下面的图片:

以上是我将鼠标悬停在“美元账户 1”上时的情况
而且即使鼠标没有在任何特定的帐户上,但在更深层次的菜单中的其他区域,高亮效果仍然存在,见图:

这显然感觉不对。谁能告诉我我做错了什么?谢谢!
MemnuItemis 已经ItemsControl因此拥有自己的ItemsSource属性,您可以绑定到该属性。尝试这样的事情:
<MenuItem Header="Map to account" ItemsSource="{Binding RelatedAccounts}" >
<MenuItem.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Number}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
<MenuItem.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding PlacementTarget.DataContext.MapToAccountCommand,
RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
<Setter Property="CommandParameter" Value="{Binding}"/>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您将其ItemsControl作为MenuItem项目放置,因此 WPF 会将其包裹起来,MenuItem并且您的整体与列表中的其他项目ItemsControl成为一个大项目MenuItemMenuItems
| 归档时间: |
|
| 查看次数: |
2651 次 |
| 最近记录: |