如何在不破坏主题的情况下真正隐藏 ListViewItem?

How do I truly hide a ListViewItem without destroying my theme?

我的问题似乎和其他人一样,因为我发现了其他一些类似的问题(例如 WPF - hiding listbox items). In that particular question/answer, I've gotten further than anything else I've found combined. The problem I'm facing is that when I implement the DataTrigger as it is in the answer there (slightly modified for ListView as opposed to ListBox), I get the proper collapsing of the item, but for certain things, my theme appears to be reverted to the defaults instead of using my ModernUI 样式。

这是我添加到我的 ListView 中的内容,以便真正折叠折叠的项目:

<ListView.ItemContainerStyle>
    <Style TargetType="{x:Type ListViewItem}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Visibility}" Value="Collapsed">
                <Setter Property="Visibility" Value="Collapsed"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</ListView.ItemContainerStyle>

这是在 添加上述内容之前 过滤项目的示例:

(注意不应该出现的项目的橙色悬停)

下面是 添加上述内容后 筛选的项目示例:

(请注意 hover/selection 指示器现在不知何故是蓝色的,我的文本字段大小不再合适)

非常感谢任何人提供的帮助,也非常感谢您花时间阅读本文。

Side-note:请不要只告诉我使用CollectionView来过滤。我昨天大部分时间都在与它作斗争,并且由于使用 BindingList<> 而不是 ObservableCollection<>,它根本不适合我的情况。

这里的问题是 ModernUI 框架覆盖了 ListViewItem 的默认样式,但是您正在覆盖这个:

<Style TargetType="{x:Type ListViewItem}">

现在您的样式成为 ListViewItem 的新 默认 样式。要解决此问题,请使用 BasedOn 属性来 继承 ModernUI 样式。

<Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource {x:Type ListViewItem}}">

上面的代码简单地继承了默认的 ListViewItem 样式(已被 ModernUI 覆盖)。