突出显示listview项目将无法正常工作

时间:2014-01-15 15:18:40

标签: wpf listview styles highlight itemcontainerstyle

在我的listView上应用自定义ItemContainerStyle后,突出显示,listView的项目将无法正常工作,只有在鼠标位于{{1}之上时才有效您可以在屏幕截图中看到该项目:

原创精彩集锦(未应用任何款式):

enter image description here

自定义ItemContainerStyle应用时突出显示

enter image description here

在应用自定义ItemContainerStyle时突出显示(鼠标悬停在ContentPresenter上)

enter image description here

ListView样式:

ContentPresenter

ItemContainerStyle:

    <Style x:Key="DetailStyle" TargetType="{x:Type ListView}">
        <Setter Property="l:ListBoxSelector.Enabled" Value="True"/>
        <Setter Property="ItemContainerStyle" Value="{StaticResource DetailViewStyle}"/>
        <Setter Property="View">
            <Setter.Value>
                <GridView AllowsColumnReorder="True">
                    <GridViewColumn Width="30" CellTemplate="{StaticResource columnIconDT}"/>
                    <GridViewColumn Header="Name" Width="100" CellTemplate="{StaticResource columnNameDT}"/>
                    <GridViewColumn Header="Size"  Width="100" CellTemplate="{StaticResource columnSizeDT}"/>
                </GridView>
            </Setter.Value>
        </Setter>
    </Style>

我该如何解决?

1 个答案:

答案 0 :(得分:0)

您的问题是您已使用自己的定义替换ControlTemplate的默认ListViewItem,并且该定义不包含在鼠标悬停时突出显示该项目的元素。

解决方案很简单...找到默认的ControlTemplate并使用缺少的元素更新您的ControlTemplate ...我猜,您至少需要VisualStateManager.VisualStateGroups元素来自原始ControlTemplate

您可以在MSDN上的ListView Styles and Templates页面找到ControlTemplate的默认ListViewItem的完整详情。


更新&gt;&gt;&gt;

老兄,如果要覆盖任何控件ControlTemplate的一部分,你可以这样做:

首先,将整个默认ControlTemplate复制到您的ControlTemplate中,并确保其正常运行。然后,只有 然后,您是否可以开始调整内容,每次添加或删除一些内容时检查它是否仍按预期工作。

这是一种自动防故障方法,只有你身边的草率工作才能阻止它工作......放手一搏。