Themes/MaterialDesignTheme.ListView.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:converters="clr-namespace:MaterialDesignThemes.Wpf.Converters"
                    xmlns:wpf="clr-namespace:MaterialDesignThemes.Wpf">
 
  <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ListBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Thumb.xaml" />
  </ResourceDictionary.MergedDictionaries>
 
  <Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" TargetType="{x:Type ScrollViewer}">
    <Setter Property="CanContentScroll" Value="True" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type ScrollViewer}">
          <Grid Background="{TemplateBinding Background}">
            <Grid.ColumnDefinitions>
              <ColumnDefinition Width="*" />
              <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
              <RowDefinition Height="*" />
              <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
 
            <DockPanel Margin="{TemplateBinding Padding}">
              <ScrollViewer wpf:ScrollViewerAssist.SyncHorizontalOffset="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
                            wpf:ScrollViewerAssist.IgnorePadding="{Binding Path=(wpf:ScrollViewerAssist.IgnorePadding), RelativeSource={RelativeSource TemplatedParent}}"
                            wpf:ScrollViewerAssist.PaddingMode="{Binding Path=(wpf:ScrollViewerAssist.PaddingMode), RelativeSource={RelativeSource TemplatedParent}}"
                            DockPanel.Dock="Top"
                            Focusable="false"
                            HorizontalScrollBarVisibility="Hidden"
                            VerticalScrollBarVisibility="Hidden">
                <Border BorderBrush="{DynamicResource MaterialDesign.Brush.ListView.Separator}" BorderThickness="0,0,0,1">
                  <StackPanel Background="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ListViewAssist.HeaderRowBackground)}" Orientation="Horizontal">
                    <GridViewHeaderRowPresenter x:Name="PART_GridViewHeaderRowPresenter"
                                                AllowsColumnReorder="{Binding Path=TemplatedParent.View.AllowsColumnReorder, RelativeSource={RelativeSource TemplatedParent}}"
                                                ColumnHeaderContainerStyle="{Binding Path=TemplatedParent.View.ColumnHeaderContainerStyle, RelativeSource={RelativeSource TemplatedParent}}"
                                                ColumnHeaderContextMenu="{Binding Path=TemplatedParent.View.ColumnHeaderContextMenu, RelativeSource={RelativeSource TemplatedParent}}"
                                                ColumnHeaderTemplate="{Binding Path=TemplatedParent.View.ColumnHeaderTemplate, RelativeSource={RelativeSource TemplatedParent}}"
                                                ColumnHeaderTemplateSelector="{Binding Path=TemplatedParent.View.ColumnHeaderTemplateSelector, RelativeSource={RelativeSource TemplatedParent}}"
                                                ColumnHeaderToolTip="{Binding Path=TemplatedParent.View.ColumnHeaderToolTip, RelativeSource={RelativeSource TemplatedParent}}"
                                                Columns="{Binding Path=TemplatedParent.View.Columns, RelativeSource={RelativeSource TemplatedParent}}"
                                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                    <!-- NB: Rectangle added to keep the width of the header ScrollViewer the same size as the list items -->
                    <Rectangle Margin="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ListViewAssist.ListViewItemPadding), Converter={x:Static converters:HorizontalThicknessConverter.Instance}}" />
                  </StackPanel>
                   
                </Border>
 
              </ScrollViewer>
 
              <ScrollContentPresenter Name="PART_ScrollContentPresenter"
                                      CanContentScroll="{TemplateBinding CanContentScroll}"
                                      CanHorizontallyScroll="False"
                                      CanVerticallyScroll="False"
                                      KeyboardNavigation.DirectionalNavigation="Local" />
            </DockPanel>
 
            <ScrollBar Name="PART_HorizontalScrollBar"
                       Grid.Row="1"
                       Maximum="{TemplateBinding ScrollableWidth}"
                       Orientation="Horizontal"
                       ViewportSize="{TemplateBinding ViewportWidth}"
                       Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                       Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" />
 
            <ScrollBar Name="PART_VerticalScrollBar"
                       Grid.Column="1"
                       Maximum="{TemplateBinding ScrollableHeight}"
                       Orientation="Vertical"
                       ViewportSize="{TemplateBinding ViewportHeight}"
                       Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                       Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" />
 
          </Grid>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
  <Style x:Key="{x:Type GridViewColumnHeader}" TargetType="GridViewColumnHeader">
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Header.Foreground}" />
    <Setter Property="HorizontalContentAlignment" Value="Left" />
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="Padding" Value="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:DataGridAssist.ColumnHeaderPadding)}" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="GridViewColumnHeader">
          <DockPanel>
            <wpf:GridViewColumnThumb x:Name="PART_HeaderGripper"
                                     Margin="0,0,-8,0"
                                     DockPanel.Dock="Right"
                                     Style="{StaticResource MaterialDesignGridViewColumnHeaderGripper}" />
            <Border x:Name="HeaderBorder"
                    Padding="{TemplateBinding Padding}"
                    BorderThickness="{TemplateBinding BorderThickness}">
              <ContentPresenter x:Name="HeaderContent"
                                Margin="{TemplateBinding Padding}"
                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                RecognizesAccessKey="True"
                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
 
            </Border>
          </DockPanel>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
              <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="TextBlock.FontWeight" Value="Medium" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Style.Triggers>
      <Trigger Property="Role" Value="Floating">
        <Setter Property="Opacity" Value="0.7" />
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="GridViewColumnHeader">
              <DockPanel Name="PART_FloatingHeaderCanvas">
                <Border BorderBrush="{DynamicResource MaterialDesign.Brush.Primary}" BorderThickness="1" />
              </DockPanel>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Trigger>
      <Trigger Property="Role" Value="Padding">
        <Setter Property="Opacity" Value="0.7" />
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="GridViewColumnHeader">
              <Canvas Name="PART_FloatingHeaderCanvas" />
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Trigger>
    </Style.Triggers>
  </Style>
 
  <Style x:Key="MaterialDesignGridViewItem" TargetType="ListViewItem">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="ListBoxItem">
          <Border x:Name="Border"
                  Padding="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ListViewAssist.ListViewItemPadding)}"
                  Background="{TemplateBinding Background}"
                  BorderBrush="{DynamicResource MaterialDesign.Brush.ListView.Separator}"
                  BorderThickness="0,0,0,1"
                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
            <GridViewRowPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Style.Triggers>
      <Trigger Property="IsKeyboardFocusWithin" Value="True">
        <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" />
      </Trigger>
      <Trigger Property="IsSelected" Value="True">
        <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ListView.Selected}" />
      </Trigger>
      <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ListView.Hover}" />
      </Trigger>
      <MultiTrigger>
        <MultiTrigger.Conditions>
          <Condition Property="IsSelected" Value="True" />
          <Condition Property="Selector.IsSelectionActive" Value="False" />
        </MultiTrigger.Conditions>
        <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ListView.Selected}" />
      </MultiTrigger>
      <MultiTrigger>
        <MultiTrigger.Conditions>
          <Condition Property="IsSelected" Value="True" />
          <Condition Property="Selector.IsSelectionActive" Value="True" />
        </MultiTrigger.Conditions>
        <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
      </MultiTrigger>
      <Trigger Property="IsEnabled" Value="false">
        <Setter Property="Opacity" Value=".56" />
      </Trigger>
      <Trigger Property="ItemsControl.AlternationIndex" Value="1">
        <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.ListView.Hover}" />
      </Trigger>
    </Style.Triggers>
  </Style>
 
 
 
  <Style x:Key="MaterialDesignListView" TargetType="{x:Type ListView}">
    <Style.Resources>
      <converters:ListViewGridViewConverter x:Key="MaterialDesignListViewItemContainerStyleConverter"
                                        DefaultValue="{StaticResource MaterialDesignListBoxItem}"
                                        ViewValue="{StaticResource MaterialDesignGridViewItem}" />
      <converters:ListViewGridViewConverter x:Key="MaterialDesignListViewTemplateConverter">
        <converters:ListViewGridViewConverter.DefaultValue>
          <ControlTemplate TargetType="{x:Type ListView}">
            <ScrollViewer>
              <ItemsPresenter />
            </ScrollViewer>
            <ControlTemplate.Triggers>
              <Trigger Property="IsGrouping" Value="True">
                <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </converters:ListViewGridViewConverter.DefaultValue>
        <converters:ListViewGridViewConverter.ViewValue>
          <ControlTemplate TargetType="{x:Type ListView}">
            <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}">
              <ItemsPresenter />
            </ScrollViewer>
            <ControlTemplate.Triggers>
              <Trigger Property="IsGrouping" Value="True">
                <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </converters:ListViewGridViewConverter.ViewValue>
      </converters:ListViewGridViewConverter>
    </Style.Resources>
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Background}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="FontSize" Value="13" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
    <Setter Property="ItemContainerStyle" Value="{Binding RelativeSource={RelativeSource Self}, Path=View, Converter={StaticResource MaterialDesignListViewItemContainerStyleConverter}}" />
    <Setter Property="OverridesDefaultStyle" Value="False" />
    <Setter Property="ScrollViewer.CanContentScroll" Value="True" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.PanningMode" Value="Both" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="Stylus.IsFlicksEnabled" Value="False" />
    <Setter Property="Template" Value="{Binding RelativeSource={RelativeSource Self}, Path=View, Converter={StaticResource MaterialDesignListViewTemplateConverter}}" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
  </Style>
 
</ResourceDictionary>