ListViewItem覆盖默认样式中断gridviews

我想知道是否有人遇到过这种情况。 基本上我要做的是覆盖默认的listviewitem来自定义所选的背景/前景。 我的工作一切都很好,花花公子。 问题是,我注意到在我已经实现了网格视图的列表视图中,列被破坏了。 我不确定是什么打破这个。 我的覆盖默认样式的方法是使用blend来通过编辑模板副本来获得完整样式。 根据需要修改它。 应用它。 这几乎就是它的样子。 有什么想法吗?

                                 

            

          

我在两种情况下都检查了ListViews的控件模板,并得出结论,样式不适用于GridViews因为它们需要GridViewRowPresenter来正确布局行数据,而不是ContentPresenter

当然,如果你这样做,你会发现你的普通ListViews不使用GridViews不再正确格式化,因为它们需要ContentPresenter

我并不完全确定最好的方法,但偶然发现了这篇博文: http : //www.steelyeyedview.com/2010/03/contentpresenter-gridviewrowpresenter.html

我将在这里重复的要点,以防它被删除:

他的解决方案是一个整洁的小黑客,似乎工作。 它使用两个演示者,默认情况下隐藏了ContentPresenterVisibility="Collapsed" ),并且如果GridViewRowPresenter没有内容,则使用触发器使ContentPresenter可见。 由于GridViewRowPresenter没有内容,因此无论如何都不会显示任何内容。

调整你的Style以包括他的修复,你会有这样的东西(一些代码被移除焦点):