Themes/MaterialDesignTheme.DataGrid.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.CheckBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.DataGrid.ComboBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Shadows.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.TextBlock.xaml" />
    <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Thumb.xaml" />
  </ResourceDictionary.MergedDictionaries>
 
  <Style x:Key="MaterialDesignDataGridCheckBoxColumnStyle"
         TargetType="{x:Type CheckBox}"
         BasedOn="{StaticResource MaterialDesignCheckBox}">
    <Setter Property="Focusable" Value="False" />
    <Setter Property="HorizontalAlignment" Value="Center" />
    <Setter Property="IsHitTestVisible" Value="False" />
  </Style>
 
  <Style x:Key="MaterialDesignDataGridCheckBoxColumnEditingStyle"
         TargetType="{x:Type CheckBox}"
         BasedOn="{StaticResource MaterialDesignCheckBox}">
    <Setter Property="HorizontalAlignment" Value="Center" />
  </Style>
 
  <Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type ComboBox}, ResourceId=MaterialDataGridComboBoxColumnStyle}"
         TargetType="{x:Type ComboBox}"
         BasedOn="{StaticResource MaterialDesignDataGridComboBox}">
    <Setter Property="Focusable" Value="False" />
    <Setter Property="IsHitTestVisible" Value="False" />
  </Style>
 
  <Style x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type ComboBox}, ResourceId=MaterialDataGridComboBoxColumnEditingStyle}"
         TargetType="{x:Type ComboBox}"
         BasedOn="{StaticResource MaterialDesignDataGridComboBox}" />
 
  <Style x:Key="MaterialDesignDataGridTextColumnEditingStyle"
         TargetType="{x:Type TextBox}"
         BasedOn="{StaticResource MaterialDesignTextBox}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderThickness" Value="0,0,0,2" />
    <Setter Property="Margin" Value="-1,0,-1,-4" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type TextBox}">
          <Border x:Name="border"
                  Padding="0,0,0,2"
                  Background="{TemplateBinding Background}"
                  BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  SnapsToDevicePixels="True">
            <Grid>
              <ScrollViewer x:Name="PART_ContentHost"
                            wpf:ScrollViewerAssist.IgnorePadding="{Binding Path=(wpf:ScrollViewerAssist.IgnorePadding), RelativeSource={RelativeSource TemplatedParent}}"
                            wpf:ScrollViewerAssist.PaddingMode="{Binding Path=(wpf:ScrollViewerAssist.PaddingMode), RelativeSource={RelativeSource TemplatedParent}}"
                            Focusable="false"
                            HorizontalScrollBarVisibility="Hidden"
                            VerticalScrollBarVisibility="Hidden" />
              <wpf:SmartHint x:Name="Hint"
                             Margin="1,0"
                             FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}"
                             FontSize="{TemplateBinding FontSize}"
                             Hint="{Binding Path=(wpf:HintAssist.Hint), RelativeSource={RelativeSource TemplatedParent}}"
                             HintOpacity="{Binding Path=(wpf:HintAssist.HintOpacity), RelativeSource={RelativeSource TemplatedParent}}"
                             HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
                             UseFloating="{Binding Path=(wpf:HintAssist.IsFloating), RelativeSource={RelativeSource TemplatedParent}}" />
            </Grid>
          </Border>
          <ControlTemplate.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
              <Setter TargetName="border" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ValidationError}" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
  <Style x:Key="MaterialDesignDataGridTextColumnStyle"
         TargetType="{x:Type TextBlock}"
         BasedOn="{StaticResource {x:Type TextBlock}}">
    <Setter Property="TextTrimming" Value="WordEllipsis" />
    <Setter Property="Validation.ErrorTemplate">
      <Setter.Value>
        <ControlTemplate>
          <Border Margin="-1,0,-1,-4"
                  Padding="1,0,1,2"
                  BorderBrush="{DynamicResource MaterialDesign.Brush.ValidationError}"
                  BorderThickness="0,0,0,2">
            <AdornedElementPlaceholder />
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
  <Style x:Key="MaterialDesignDataGridTextColumnPopupEditingStyle"
         TargetType="{x:Type TextBox}"
         BasedOn="{StaticResource MaterialDesignTextBox}">
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.Primary}" />
    <Setter Property="BorderThickness" Value="0,0,0,2" />
    <Setter Property="Margin" Value="-1,0,-1,-4" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type TextBox}">
          <Grid>
            <wpf:PopupEx AllowsTransparency="True"
                         HorizontalOffset="-6"
                         IsOpen="True"
                         Placement="RelativePoint"
                         PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}}"
                         PopupAnimation="Fade"
                         VerticalOffset="-6">
              <Grid>
                <AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}">
                  <Border Margin="5,5,5,5"
                          Background="{DynamicResource MaterialDesign.Brush.Background}"
                          BorderThickness="1"
                          CornerRadius="2"
                          Effect="{StaticResource MaterialDesignShadowDepth2}" />
                </AdornerDecorator>
                <Border Margin="5,5,5,5"
                        Padding="16"
                        Background="Transparent"
                        BorderBrush="{DynamicResource MaterialDesign.Brush.DataGrid.PopupBorder}"
                        BorderThickness="1"
                        CornerRadius="2">
                  <Grid>
                    <Grid.ColumnDefinitions>
                      <ColumnDefinition Width="Auto" />
                      <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                      <RowDefinition Height="Auto" />
                      <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Border x:Name="border"
                            Grid.ColumnSpan="2"
                            Padding="0,-1,0,3"
                            Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            SnapsToDevicePixels="True">
                      <Grid Validation.ErrorTemplate="{StaticResource MaterialDesignValidationErrorTemplate}">
                        <ScrollViewer x:Name="PART_ContentHost"
                                      wpf:ScrollViewerAssist.IgnorePadding="{Binding Path=(wpf:ScrollViewerAssist.IgnorePadding), RelativeSource={RelativeSource TemplatedParent}}"
                                      wpf:ScrollViewerAssist.PaddingMode="{Binding Path=(wpf:ScrollViewerAssist.PaddingMode), RelativeSource={RelativeSource TemplatedParent}}"
                                      Focusable="false"
                                      HorizontalScrollBarVisibility="Hidden"
                                      VerticalScrollBarVisibility="Hidden" />
                        <wpf:SmartHint x:Name="Hint"
                                       Margin="1,0"
                                       FontFamily="{TemplateBinding wpf:HintAssist.FontFamily}"
                                       FontSize="{TemplateBinding FontSize}"
                                       Hint="{Binding Path=(wpf:HintAssist.Hint), RelativeSource={RelativeSource TemplatedParent}}"
                                       HintOpacity="{Binding Path=(wpf:HintAssist.HintOpacity), RelativeSource={RelativeSource TemplatedParent}}"
                                       HintProxy="{Binding RelativeSource={RelativeSource TemplatedParent}, Converter={x:Static converters:HintProxyFabricConverter.Instance}}"
                                       UseFloating="{Binding Path=(wpf:HintAssist.IsFloating), RelativeSource={RelativeSource TemplatedParent}}" />
                      </Grid>
                    </Border>
                    <Border Grid.Row="1"
                            Grid.Column="0"
                            MaxWidth="{TemplateBinding ActualWidth}"
                            Background="{TemplateBinding wpf:ValidationAssist.Background}"
                            Visibility="{TemplateBinding Validation.HasError, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}">
                      <ItemsControl ItemsSource="{TemplateBinding Validation.Errors}">
                        <ItemsControl.ItemTemplate>
                          <DataTemplate DataType="ValidationError">
                            <TextBlock Margin="0,2"
                                       HorizontalAlignment="{TemplateBinding wpf:ValidationAssist.HorizontalAlignment}"
                                       FontSize="{TemplateBinding wpf:ValidationAssist.FontSize}"
                                       Foreground="{DynamicResource MaterialDesign.Brush.ValidationError}"
                                       Text="{Binding ErrorContent}"
                                       TextWrapping="Wrap"
                                       UseLayoutRounding="false" />
                          </DataTemplate>
                        </ItemsControl.ItemTemplate>
                      </ItemsControl>
                    </Border>
                    <TextBlock Grid.Row="1"
                               Grid.Column="1"
                               HorizontalAlignment="Right"
                               Opacity=".56"
                               Visibility="{TemplateBinding MaxLength, Converter={x:Static converters:NotZeroToVisibilityConverter.Instance}}">
                      <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0}/{1}">
                          <Binding Converter="{x:Static converters:StringLengthValueConverter.Instance}"
                                   Path="Text"
                                   RelativeSource="{RelativeSource TemplatedParent}" />
                          <Binding Path="MaxLength" RelativeSource="{RelativeSource TemplatedParent}" />
                        </MultiBinding>
                      </TextBlock.Text>
                    </TextBlock>
                  </Grid>
                </Border>
              </Grid>
            </wpf:PopupEx>
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
              <Setter TargetName="border" Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.ValidationError}" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
  </Style>
 
  <Style x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}" TargetType="{x:Type Button}">
    <Setter Property="BorderBrush" Value="{Binding HorizontalGridLinesBrush, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
    <Setter Property="BorderThickness" Value="{Binding GridLinesVisibility, RelativeSource={RelativeSource AncestorType=DataGrid}, Converter={x:Static converters:GridLinesVisibilityBorderToThicknessConverter.Instance}}" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">
          <Border x:Name="Border"
                  Background="Transparent"
                  BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  SnapsToDevicePixels="True">
            <Polygon x:Name="Arrow"
                     Margin="8,8,3,3"
                     HorizontalAlignment="Right"
                     VerticalAlignment="Bottom"
                     Fill="{DynamicResource MaterialDesign.Brush.Foreground}"
                     Opacity="0.5"
                     Points="0,10 10,10 10,0"
                     Stretch="Uniform" />
          </Border>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
              <Setter TargetName="Border" Property="Background" Value="{DynamicResource MaterialDesign.Brush.DataGrid.RowHoverBackground}" />
            </Trigger>
            <Trigger Property="IsPressed" Value="True">
              <Setter TargetName="Border" Property="Background" Value="{DynamicResource MaterialDesign.Brush.DataGrid.ButtonPressed}" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="False">
              <Setter TargetName="Arrow" Property="Visibility" Value="Collapsed" />
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
  <Style x:Key="MaterialDesignDataGridCell" TargetType="{x:Type DataGridCell}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="Foreground" Value="{Binding Foreground, RelativeSource={RelativeSource AncestorType=DataGridRow}}" />
    <Setter Property="Padding" Value="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:DataGridAssist.CellPadding)}" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridCell}">
          <Grid>
            <Border Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}"
                    SnapsToDevicePixels="True" />
            <ContentPresenter Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
          </Grid>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
    <Style.Triggers>
      <Trigger Property="IsKeyboardFocusWithin" Value="True">
        <Setter Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=(wpf:DataGridAssist.SelectedCellBorderBrush)}" />
      </Trigger>
      <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
          <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="True" />
          <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="False" />
        </MultiDataTrigger.Conditions>
        <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.DataGrid.Selected}" />
      </MultiDataTrigger>
      <Trigger Property="IsEnabled" Value="False">
        <Setter Property="Opacity" Value=".56" />
      </Trigger>
    </Style.Triggers>
  </Style>
 
  <Style x:Key="MaterialDesignDataGridColumnHeader" TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="BorderBrush" Value="{Binding HorizontalGridLinesBrush, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
    <Setter Property="BorderThickness" Value="{Binding GridLinesVisibility, RelativeSource={RelativeSource AncestorType=DataGrid}, Converter={x:Static converters:GridLinesVisibilityBorderToThicknessConverter.Instance}}" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Header.Foreground}" />
    <Setter Property="Padding" Value="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:DataGridAssist.ColumnHeaderPadding)}" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
          <ControlTemplate.Resources>
            <Storyboard x:Key="GoToVisible">
              <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SortDirectionIndicator" Storyboard.TargetProperty="Width">
                <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="0" />
                <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="12" />
              </DoubleAnimationUsingKeyFrames>
            </Storyboard>
            <Storyboard x:Key="GoToHidden">
              <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SortDirectionIndicator" Storyboard.TargetProperty="Width">
                <EasingDoubleKeyFrame KeyTime="0:0:0.0" Value="12" />
                <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0" />
              </DoubleAnimationUsingKeyFrames>
            </Storyboard>
          </ControlTemplate.Resources>
          <Grid Background="Transparent">
            <Border Padding="{TemplateBinding Padding}"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
              <Grid HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
                <wpf:ListSortDirectionIndicator x:Name="SortDirectionIndicator"
                                                Width="0"
                                                Height="12"
                                                Margin="-16,0,0,0"
                                                HorizontalAlignment="Left"
                                                IsTabStop="False"
                                                ListSortDirection="{TemplateBinding SortDirection}"
                                                Opacity="0.45"
                                                Visibility="{Binding CanUserSortColumns, RelativeSource={RelativeSource AncestorType=DataGrid}, Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}}" />
                <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                  RecognizesAccessKey="True"
                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
                  <ContentPresenter.Resources>
                    <Style TargetType="TextBlock">
                      <Setter Property="TextTrimming" Value="WordEllipsis" />
                      <Setter Property="wpf:TextBlockAssist.AutoToolTip" Value="True" />
                    </Style>
                  </ContentPresenter.Resources>
                </ContentPresenter>
              </Grid>
            </Border>
            <Thumb x:Name="PART_LeftHeaderGripper"
                   HorizontalAlignment="Left"
                   Style="{StaticResource MaterialDesignGridColumnHeaderGripper}" />
            <Thumb x:Name="PART_RightHeaderGripper"
                   HorizontalAlignment="Right"
                   Style="{StaticResource MaterialDesignGridColumnHeaderGripper}" />
          </Grid>
          <ControlTemplate.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
              <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
            </Trigger>
            <Trigger Property="SortDirection" Value="Ascending">
              <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
            </Trigger>
            <Trigger Property="SortDirection" Value="Descending">
              <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
            </Trigger>
            <Trigger SourceName="SortDirectionIndicator" Property="IsNeutral" Value="False">
              <Trigger.EnterActions>
                <BeginStoryboard Name="GoToVisible" Storyboard="{StaticResource GoToVisible}" />
              </Trigger.EnterActions>
              <Trigger.ExitActions>
                <RemoveStoryboard BeginStoryboardName="GoToVisible" />
                <BeginStoryboard Storyboard="{StaticResource GoToHidden}" />
              </Trigger.ExitActions>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="TextBlock.FontWeight" Value="Medium" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
  </Style>
 
  <Style x:Key="MaterialDesignDataGridRowHeader" TargetType="{x:Type DataGridRowHeader}">
    <Setter Property="BorderBrush" Value="{Binding HorizontalGridLinesBrush, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
    <Setter Property="BorderThickness" Value="{Binding GridLinesVisibility, RelativeSource={RelativeSource AncestorType=DataGrid}, Converter={x:Static converters:GridLinesVisibilityBorderToThicknessConverter.Instance}}" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridRowHeader}">
          <Grid MinWidth="24">
            <Border Padding="{TemplateBinding Padding}"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
              <StackPanel Orientation="Horizontal">
                <ContentPresenter VerticalAlignment="Center"
                                  RecognizesAccessKey="True"
                                  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                <Control SnapsToDevicePixels="false"
                         Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"
                         Visibility="{Binding (Validation.HasError), Converter={x:Static converters:BooleanToVisibilityConverter.CollapsedInstance}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" />
              </StackPanel>
            </Border>
            <Thumb x:Name="PART_TopHeaderGripper"
                   VerticalAlignment="Top"
                   Style="{StaticResource MaterialDesignGridRowHeaderGripper}" />
            <Thumb x:Name="PART_BottomHeaderGripper"
                   VerticalAlignment="Bottom"
                   Style="{StaticResource MaterialDesignGridRowHeaderGripper}" />
          </Grid>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style>
 
  <Style x:Key="MaterialDesignDataGridRow" TargetType="{x:Type DataGridRow}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridRow}">
          <Border x:Name="DGR_Border"
                  Background="{TemplateBinding Background}"
                  BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  SnapsToDevicePixels="True">
            <SelectiveScrollingGrid>
              <SelectiveScrollingGrid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
              </SelectiveScrollingGrid.ColumnDefinitions>
              <SelectiveScrollingGrid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="Auto" />
              </SelectiveScrollingGrid.RowDefinitions>
              <DataGridCellsPresenter Grid.Column="1"
                                      ItemsPanel="{TemplateBinding ItemsPanel}"
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
              <DataGridDetailsPresenter Grid.Row="1"
                                        Grid.Column="1"
                                        SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                                        Visibility="{TemplateBinding DetailsVisibility}" />
              <DataGridRowHeader Grid.Row="0"
                                 Grid.RowSpan="2"
                                 Grid.Column="0"
                                 SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"
                                 Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
            </SelectiveScrollingGrid>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="Validation.ErrorTemplate" Value="{x:Null}" />
    <Setter Property="ValidationErrorTemplate">
      <Setter.Value>
        <ControlTemplate>
          <TextBlock Margin="2,0,0,0"
                     VerticalAlignment="Center"
                     Foreground="#d50000"
                     Text="!" />
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Style.Triggers>
      <Trigger Property="IsSelected" Value="True">
        <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.DataGrid.Selected}" />
      </Trigger>
      <Trigger Property="IsMouseOver" Value="True">
        <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.DataGrid.RowHoverBackground}" />
      </Trigger>
      <Trigger Property="IsNewItem" Value="True">
        <Setter Property="Margin" Value="{Binding NewItemMargin, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
      </Trigger>
    </Style.Triggers>
  </Style>
 
  <Style x:Key="MaterialDesignDataGrid" TargetType="{x:Type DataGrid}">
    <Setter Property="Background" Value="{DynamicResource MaterialDesign.Brush.Background}" />
    <Setter Property="BorderBrush" Value="{DynamicResource MaterialDesign.Brush.DataGrid.Border}" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="FontSize" Value="13" />
    <Setter Property="Foreground" Value="{DynamicResource MaterialDesign.Brush.Foreground}" />
    <Setter Property="GridLinesVisibility" Value="Horizontal" />
    <Setter Property="HeadersVisibility" Value="Column" />
    <Setter Property="HorizontalGridLinesBrush">
      <Setter.Value>
        <MultiBinding Converter="{x:Static converters:RemoveAlphaBrushConverter.Instance}">
          <Binding Path="BorderBrush" RelativeSource="{RelativeSource Self}" />
          <Binding Path="Background" RelativeSource="{RelativeSource Self}" />
        </MultiBinding>
      </Setter.Value>
    </Setter>
    <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected" />
    <Setter Property="ScrollViewer.CanContentScroll" Value="true" />
    <Setter Property="ScrollViewer.PanningMode" Value="Both" />
    <Setter Property="Stylus.IsFlicksEnabled" Value="False" />
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGrid}">
          <Border Padding="{TemplateBinding Padding}"
                  Background="{TemplateBinding Background}"
                  BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  CornerRadius="{TemplateBinding wpf:DataGridAssist.CornerRadius}"
                  SnapsToDevicePixels="True">
            <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false">
              <ScrollViewer.Template>
                <ControlTemplate TargetType="{x:Type ScrollViewer}">
                  <Grid>
                    <Grid.ColumnDefinitions>
                      <ColumnDefinition Width="Auto" />
                      <ColumnDefinition Width="*" />
                      <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                      <RowDefinition Height="Auto" />
                      <RowDefinition Height="*" />
                      <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Button Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
                            Command="{x:Static DataGrid.SelectAllCommand}"
                            Focusable="false"
                            Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}"
                            Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
                    <Border Grid.Row="0"
                            Grid.Column="1"
                            Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}">
                      <DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter" />
                    </Border>
                    <ScrollContentPresenter x:Name="PART_ScrollContentPresenter"
                                            Grid.Row="1"
                                            Grid.Column="0"
                                            Grid.ColumnSpan="2"
                                            CanContentScroll="{TemplateBinding CanContentScroll}" />
                    <ScrollBar x:Name="PART_VerticalScrollBar"
                               Grid.Row="1"
                               Grid.Column="2"
                               Maximum="{TemplateBinding ScrollableHeight}"
                               Orientation="Vertical"
                               ViewportSize="{TemplateBinding ViewportHeight}"
                               Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                               Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" />
                    <Grid Grid.Row="2" Grid.Column="1">
                      <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
                        <ColumnDefinition Width="*" />
                      </Grid.ColumnDefinitions>
                      <ScrollBar x:Name="PART_HorizontalScrollBar"
                                 Grid.Column="1"
                                 Maximum="{TemplateBinding ScrollableWidth}"
                                 Orientation="Horizontal"
                                 ViewportSize="{TemplateBinding ViewportWidth}"
                                 Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                                 Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" />
                    </Grid>
                  </Grid>
                </ControlTemplate>
              </ScrollViewer.Template>
              <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            </ScrollViewer>
          </Border>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
    <Setter Property="VerticalGridLinesBrush" Value="{Binding HorizontalGridLinesBrush, RelativeSource={RelativeSource Self}}" />
    <Setter Property="wpf:DataGridAssist.ApplyMaterialDesignColumnStyles" Value="true" />
    <Setter Property="wpf:DataGridAssist.AutoGeneratedCheckBoxStyle" Value="{StaticResource MaterialDesignDataGridCheckBoxColumnStyle}" />
    <Setter Property="wpf:DataGridAssist.AutoGeneratedComboBoxStyle" Value="{x:Static wpf:DataGridComboBoxColumn.DefaultElementStyle}" />
    <Setter Property="wpf:DataGridAssist.AutoGeneratedEditingCheckBoxStyle" Value="{StaticResource MaterialDesignDataGridCheckBoxColumnEditingStyle}" />
    <Setter Property="wpf:DataGridAssist.AutoGeneratedEditingComboBoxStyle" Value="{x:Static wpf:DataGridComboBoxColumn.DefaultEditingElementStyle}" />
    <Setter Property="wpf:DataGridAssist.AutoGeneratedEditingTextStyle" Value="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}" />
    <Setter Property="wpf:DataGridAssist.AutoGeneratedTextStyle" Value="{StaticResource MaterialDesignDataGridTextColumnStyle}" />
    <Setter Property="wpf:DataGridAssist.EnableEditBoxAssist" Value="True" />
    <Setter Property="wpf:DataGridAssist.SelectedCellBorderBrush" Value="{DynamicResource MaterialDesign.Brush.ForegroundLight}" />
    <Style.Triggers>
      <MultiTrigger>
        <MultiTrigger.Conditions>
          <Condition Property="IsGrouping" Value="true" />
          <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false" />
        </MultiTrigger.Conditions>
        <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
      </MultiTrigger>
    </Style.Triggers>
  </Style>
</ResourceDictionary>