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

时间:2016-03-17 14:12:44

标签: wpf xaml listviewitem

我的问题似乎也是其他人的问题,因为我发现了一些类似的其他问题(例如WPF - hiding listbox items)。在那个特定的问题/答案中,我发现了比我发现的任何其他东西更多的东西。我面临的问题是,当我实现DataTrigger时,答案就在那里(对于ListView略有修改而不是ListBox),我得到了正确的折叠该项目,但对于某些事情,我的主题似乎恢复为默认值而不是使用我的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>

以下是 之前过滤 项目的示例: Before the <Style/>

(注意那个不应该在那里的物品的橙色悬停)

以下是在 添加上述内容后过滤 的项目的示例: After the <Style/>

(注意悬停/选择指示器现在显示为蓝色,我的文本字段不再适当调整大小)

任何人都可以提供的任何帮助都将非常感谢,并且感谢您花时间阅读本文。

旁注:请不要告诉我使用CollectionView进行过滤。昨天我花了大部分时间与之抗争,并且由于使用了BindingList<>而不是ObservableCollection<>,它根本无法适应我的情况。

1 个答案:

答案 0 :(得分:2)

这里的问题是ModernUI框架会覆盖ListViewItem的默认样式,但是你要覆盖它:

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

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

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

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