Wpf - ICollectionView刷新导致样式覆盖失败

时间:2014-09-17 09:33:41

标签: c# wpf icollectionview

我有一个菜单项和上下文菜单样式的默认样式,如下所示:

<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的当前排序保持为真。但是,如果在此事件发生时列表视图上打开了上下文菜单,它将恢复为默认样式而不是覆盖样式。

任何帮助都会受到赞赏吗?我怀疑这是一件很简单的事情,我忽视了。

0 个答案:

没有答案