我有一个菜单项和上下文菜单样式的默认样式,如下所示:
<ResourceDictionary>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Background" Value="Blue"/>
<Setter Property="Foreground" Value="White" />
</Style>
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="Background" Value="LightBlue"/>
</Style>
</ResourceDictionary>
在绑定到可观察集合的listview项目上显示上下文菜单时,我需要覆盖样式,如下所示:
<ListView.Resources>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Foreground" Value="Black" />
</Style>
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="Background" Value="WhiteSmoke"/>
</Style>
<ContextMenu x:Key="ItemContextMenu" ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}, Path=ContMenu}"/>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style BasedOn="{StaticResource ListItemsStretched}" TargetType="{x:Type ListViewItem}">
<Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}"/>
</Style>
</ListView.ItemContainerStyle>
这个工作正常,直到我收到我在绑定的ObservableCollection中创建的事件,以便在任何属性发生更改时通知我,这被利用,因此我可以刷新ICollectionView,这将导致listview的当前排序保持为真。但是,如果在此事件发生时列表视图上打开了上下文菜单,它将恢复为默认样式而不是覆盖样式。
任何帮助都会受到赞赏吗?我怀疑这是一件很简单的事情,我忽视了。