WPF ContextMenu使用ItemsControl错误地突出显示整个集合

WPF ContextMenu使用ItemsControl错误地突出显示整个集合,wpf,contextmenu,highlight,itemscontrol,Wpf,Contextmenu,Highlight,Itemscontrol,我需要设计一个ContextMenu,其中包括一个MenuItem,这个MenuItem有一个更深层次的菜单列表,它绑定到我的ViewModel中类型为ObservableCollection的属性。代码如下所示: <ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}" > ...

我需要设计一个
ContextMenu
,其中包括一个
MenuItem
,这个
MenuItem
有一个更深层次的菜单列表,它绑定到我的ViewModel中类型为
ObservableCollection
的属性。代码如下所示:

<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>
<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>

...                                                                                                                                                     
...
其想法是,当用户右键单击UI中的一个付款项目,并转到“映射到帐户”菜单项时,将显示更深层次的菜单项,并列出用户要选择的所有相关帐户(如您所见,
ItemsControl
绑定到
relatedcounts

一切正常,关联菜单正确显示了我从ViewModel公开的所有相关帐户,当用户右键单击一个帐户时,ViewModel中的
命令
属性
映射到帐户命令
将使用所选帐户的传递参数执行

但有一个行为我不希望:当鼠标进入比菜单“Map to account”更深的一层时,它实际上会突出显示整个菜单项集合。请看下面的图片:

以上是我将鼠标放在“美元账户1”上的情况

即使鼠标不在任何特定帐户上,但在深层菜单中的其他区域,高亮效果仍然存在,请参见图片:


这显然是不对的。谁能告诉我我做错了什么?谢谢

MemnuItem
已经是
ItemsControl
,因此它有自己的
ItemsSource
属性,您可以绑定到该属性。试着这样做:

<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>
<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>


在您的情况下,您将
ItemsControl
作为
MenuItem
项,因此WPF将它包装在
MenuItem
中,您的整个
ItemsControl
与列表中的其他
MenuItem
成为一个大
MenuItem

谢谢,您的解决方案很有魅力。你的解释也很清楚。