如何删除ListView行的悬停样式?

时间:2014-11-20 14:35:32

标签: wpf modern-ui

我使用Modern UI,我有一个包含Gridview的ListView。当我将鼠标悬停在上面或选择一行时,会有一个背景颜色应用于该行。如何删除此样式?

<ListView ... >
    <ListView.Resources>
        <SolidColorBrush x:Key="ItemBackgroundHover" Color="Transparent" />
        <Style TargetType="ListViewItem">
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="True">
                    <Setter Property="Background" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListView.Resources>
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Action">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                    ...

enter image description here

2 个答案:

答案 0 :(得分:3)

ListView.Resources中,覆盖ItemBackgroundHover画笔资源:

<SolidColorBrush x:Key="ItemBackgroundHover" Color="Transparent" />

如果您不希望突出显示所选项目,请对ItemBackgroundSelected执行相同操作。

如果您支持Modern Light主题,则可能还需要覆盖前景画笔。您可以看到已应用的画笔here

如果你用自己的风格替换现代UI的ListViewItem风格,这将不会起作用,但是你可以将它们放在他们的风格之外,它应该有效:

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

此外,根据您的屏幕截图,您可能不需要使用ListView,因为您显然不在乎选择项目。您可以使用简单的ItemsControl


要删除按钮镶边,您可以创建如下样式:

<Style x:Key="GlyphButton" TargetType="Button">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Border>
          <ContentPresenter x:Name="ContentSite" />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsPressed" Value="True">
            <Setter TargetName="ContentSite"
                    Property="Margin"
                    Value="1,1,-1,-1" />
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

答案 1 :(得分:1)

这里较老的答案对我不起作用。我被迫覆盖了ListView.ItemContainerStyle:

<Style TargetType="{x:Type ListViewItem}">  
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
                <Grid Background="{TemplateBinding Background}">
                    <Border Name="Selection" Visibility="Collapsed" />
                    <!-- This is used when GridView is put inside the ListView -->
                    <GridViewRowPresenter Grid.RowSpan="2"
                                          Margin="{TemplateBinding Padding}"
                                          HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>

                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>  

我发现并修改了here中的代码,Mike Strobel在另一个答案中提到了该代码。我做的大部分更改都是删除了触发器部分。