9

我有带有 GridView 视图的 WPF ListView,我想删除行突出显示的任何痕迹。

可以在此站点的一个答案中找到这段有用的代码:

     <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
           <Setter Property="Control.Focusable" Value="False"/>
           <Style.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                 <Setter Property="Background" Value="{x:Null}" />
                 <Setter Property="BorderBrush" Value="{x:Null}" />
              </Trigger>
           </Style.Triggers>
        </Style>
     </ListView.ItemContainerStyle>

但是,虽然此更改有助于删除大部分突出显示,但它不会删除当鼠标移到 ListView 行上时仍然出现的水平条。如何删除它?

我已经处理了涉及 Button 的类似问题,并找到了一个通过删除其 chrome 来更改 Button 模板的解决方案。

在这种 ListView/GridView 的情况下,我无法找到相应的 chrome 和要更改的模板。

4

3 回答 3

14

如果您安装了 Windows SDK,您可以在以下位置找到所有默认样式(假设您安装了示例)的 XAML 源:

%ProgramFiles%\Microsoft SDKs\Windows\v6.1\Samples\WPFSamples.zip

zip 文件包含一个文件夹 Core,其中包含 AeroTheme、LunaTheme 等,其中包含默认样式的源代码。不幸的是,这些文件非常大(Aero 大约 8500 行),并且结构或格式不是很好(IMO)。

ListViewItem 的默认控件模板如下所示:

<ControlTemplate TargetType="{x:Type ListViewItem}">
  <Border CornerRadius="2" SnapsToDevicePixels="True"
          BorderThickness="{TemplateBinding BorderThickness}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          Background="{TemplateBinding Background}">
    <Border Name="InnerBorder" CornerRadius="1" BorderThickness="1">
      <Grid>
        <Grid.RowDefinitions>
          <RowDefinition MaxHeight="11" />
          <RowDefinition />
        </Grid.RowDefinitions>

        <Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF" />
        <GridViewRowPresenter Grid.RowSpan="2" 
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
      </Grid>
    </Border>
  </Border>

  <ControlTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
      <Setter Property="Background" Value="{StaticResource ListItemHoverFill}" />
      <Setter Property="BorderBrush" Value="#FFCCF0FF" />
      <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
    </Trigger>

    <Trigger Property="IsSelected" Value="True">
      <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" />
      <Setter Property="BorderBrush" Value="#FF98DDFB" />
      <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#80FFFFFF" />
      <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
      <Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF" />
    </Trigger>

    <MultiTrigger>
      <MultiTrigger.Conditions>
        <Condition Property="IsSelected" Value="True" />
        <Condition Property="Selector.IsSelectionActive" Value="False" />
      </MultiTrigger.Conditions>

      <Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}" />
      <Setter Property="BorderBrush" Value="#FFCFCFCF" />
    </MultiTrigger>

    <MultiTrigger>
      <MultiTrigger.Conditions>
        <Condition Property="IsSelected" Value="True" />
        <Condition Property="IsMouseOver" Value="True" />
      </MultiTrigger.Conditions>

      <Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}" />
      <Setter Property="BorderBrush" Value="#FF98DDFB" />
    </MultiTrigger>

    <Trigger Property="IsEnabled" Value="False">
      <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
    </Trigger>
  </ControlTemplate.Triggers>
</ControlTemplate>

删除所有突出显示的最佳选择可能是将 ControlTemplate 替换为您自己的,其中仅包含 GridViewRowPresenter(可能在单个边框中)。不要忘记包含在禁用控件时使项目变灰的触发器。

于 2009-08-10T09:50:32.237 回答
8

我现在不在 Windows PC 前进行测试,但我遇到了与列表框类似的问题,我通过将以下内容放入我的 Window.Resources

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />

不确定它是否适用于您的列表视图。

于 2009-08-10T02:48:22.417 回答
0

使用您的代码,我根本没有看到任何行。你现在的默认主题是什么?露娜、航空等?可能是您的与我的不同,因此铬有所不同。你的还有其他特殊设置ListView吗?

Style SnooperShow Me The Template可能会帮助您追踪负责您所看到的线条的视觉元素。您可能也有兴趣重新模板化以获得您ListView想要的效果。

于 2009-08-09T20:24:03.453 回答