Search code examples
wpfwpfdatagrid

WPF overrided datagrid how to set DatagridCell Selected style


I have overrides DataGrid. Below are my code and XAML. How can I set style to change the DataGridCell background colour when the cell is selected?

<vw:DataGridExt 
   Grid.Row="1" 
   AlternatingRowBackground="LightGray" 
   ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Value,Mode=OneWay, IsAsync=True}" 
   Background="White" 
   AutoGenerateColumns="True" 
   IsReadOnly="True" 
   CanUserResizeRows="False" 
   ClipboardCopyMode="IncludeHeader"
   CanUserSortColumns="True" 
   CanUserAddRows="False" 
   SelectionMode="Extended"/>                 

 public class DataGridExt : DataGrid
 {
     public DataGridExt()
     {
         this.AutoGeneratedColumns += new EventHandler(DataGrid_AutoGeneratedColumns);
     }
 }

Solution

  • You have to provide a style for your DataGridCell

    <Style TargetType="{x:Type DataGridCell}">   
      <Setter Property="Background" Value="Transparent" />        
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="BorderBrush" Value="Transparent"/>     
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridCell}">
                    <Border Background="{TemplateBinding Background}" 
                            BorderBrush="{TemplateBinding BorderBrush}"  
                            BorderThickness="{TemplateBinding BorderThickness}" >
                        <ContentPresenter />
                    </Border>                              
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                <Setter Property="BorderBrush" Value="Black" />
            </Trigger>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="Gray"/>
            </Trigger>
        </Style.Triggers>
    </Style>
    

    and set

    SelectionUnit="Cell" for your DataGrid.
    

    Hope it helps.