2009-02-03 8 views
4

J'utilise le Datagrid WPF de Codeplex.Comment formater les en-têtes sur un Datagrid WPF?

Je suis capable de styler les lignes et avec les attributs suivants dans l'élément dg: DataGrid.

Mais comment puis-je styler les en-têtes? Je trouve des centaines d'exemples sur le web qui définissent les styles et utilisent par ex. x: Key = "DataGridColumnHeaderStyle" dans l'élément Datagrid, mais aucun d'entre eux ne semble fonctionner pour moi.

Comment puis-je simplement par ex. changer l'arrière-plan Datagrid Header en orange sur ce DataGrid?

<dg:DataGrid AlternatingRowBackground="#ddd" 
    RowBackground="#eee" 
    Name="theGrid1" 
    VerticalAlignment="Stretch" 
    AutoGenerateColumns="False" 
    BorderBrush="#ddd"> 
... 
</dg:DataGrid> 

Répondre

1

Le style est dans ce cas dans un fichier appelé generic.xaml il devrait être loacted dans un dossier themems dans votre projet.

trouvez le et ouvrez-le. à l'intérieur, vous trouverez cette ligne qui contrôle l'arrière-plan des en-têtes de colonne

<dg:DataGridHeaderBorder SortDirection="{TemplateBinding SortDirection}" 
            IsHovered="{TemplateBinding IsMouseOver}" 
            IsPressed="{TemplateBinding IsPressed}" 
            IsClickable="{TemplateBinding CanUserSort}" 
            Background="{TemplateBinding Background}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Padding ="{TemplateBinding Padding}" 
            SeparatorVisibility="{TemplateBinding SeparatorVisibility}" 


         SeparatorBrush="{TemplateBinding SeparatorBrush}"> 

essentiellement son sens à un autre endroit dans le modèle: cela vous expliquer TemlateBinding à MSDN TemplateBinding

HTH, Eric

8

Il existe également une propriété sur le DataGrid qui permet de styliser l'en-tête:

<DataGrid.ColumnHeaderStyle> 
    <Style TargetType="{x:Type DataGridColumnHeader}"> 
      <Setter Property="FontWeight" 
        Value="Bold" /> 
    </Style> 
</DataGrid.ColumnHeaderStyle> 
0

Voici un autre exemple

<DataGrid AutoGenerateColumns="False" Height="200" 
        HorizontalAlignment="Left" Name="dgDownloads" 
        VerticalAlignment="Top" Width="777" 
        Background="Black" RowBackground="Gray" Foreground="White" 
        AlternatingRowBackground="Gray" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
      <DataGrid.Columns> 

       <DataGridTextColumn 
       Header="{lex:LocTextExtension Key=Name, Dict=Resources, Assembly=PreShow.Player}" 
       Width="220" 
       IsReadOnly="True" 
       Binding="{Binding Filename}" > 
        <DataGridTextColumn.ElementStyle> 
         <Style TargetType="TextBlock"> 
          <Setter Property="TextWrapping" Value="Wrap"/> 
         </Style> 
        </DataGridTextColumn.ElementStyle> 
        <DataGridTextColumn.HeaderStyle> 
         <Style TargetType="{x:Type DataGridColumnHeader}"> 
          <Setter Property="FontWeight" Value="Bold" /> 
          <Setter Property="Foreground" Value="Yellow" /> 
          <Setter Property="Background" Value="Black" /> 
         </Style> 
        </DataGridTextColumn.HeaderStyle> 
       </DataGridTextColumn> 

       <DataGridCheckBoxColumn 
        IsReadOnly="True" 
        Header="{lex:LocTextExtension Key=Success, Dict=Resources, Assembly=PreShow.Player}" 
        Width="60" 
        Binding="{Binding IsSuccess}" 
        IsThreeState="False"> 
        <DataGridCheckBoxColumn.HeaderStyle> 
         <Style TargetType="{x:Type DataGridColumnHeader}"> 
          <Setter Property="FontWeight" Value="Bold" /> 
          <Setter Property="Foreground" Value="Yellow" /> 
          <Setter Property="Background" Value="Black" /> 
         </Style> 
        </DataGridCheckBoxColumn.HeaderStyle> 
       </DataGridCheckBoxColumn> 

       <DataGridTemplateColumn Header="{lex:LocTextExtension Key=Time, Dict=Resources, Assembly=PreShow.Player}" IsReadOnly="True"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Downloaded}" Margin="4"/> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
        <DataGridTemplateColumn.HeaderStyle> 
         <Style TargetType="{x:Type DataGridColumnHeader}"> 
          <Setter Property="FontWeight" Value="Bold" /> 
          <Setter Property="Foreground" Value="Yellow" /> 
          <Setter Property="Background" Value="Black" /> 
         </Style> 
        </DataGridTemplateColumn.HeaderStyle> 
       </DataGridTemplateColumn> 

       <DataGridCheckBoxColumn 
        IsReadOnly="True" 
        Header="{lex:LocTextExtension Key=IsDownloading, Dict=Resources, Assembly=PreShow.Player}" 
        Width="60" 
        Binding="{Binding IsDownloading}" 
        IsThreeState="False"> 
        <DataGridCheckBoxColumn.HeaderStyle> 
         <Style TargetType="{x:Type DataGridColumnHeader}"> 
          <Setter Property="FontWeight" Value="Bold" /> 
          <Setter Property="Foreground" Value="Yellow" /> 
          <Setter Property="Background" Value="Black" /> 
         </Style> 
        </DataGridCheckBoxColumn.HeaderStyle> 
       </DataGridCheckBoxColumn> 

       <DataGridHyperlinkColumn 
        Header="URL" 
        Width="Auto" 
        IsReadOnly="True" 
        Binding="{Binding Path=URL}" 
        TargetName="{Binding Path=URL}"> 
        <DataGridHyperlinkColumn.ElementStyle> 
         <Style TargetType="TextBlock"> 
          <EventSetter Event="Hyperlink.Click" Handler="OnHyperlinkClick" /> 
         </Style> 
        </DataGridHyperlinkColumn.ElementStyle> 
        <DataGridHyperlinkColumn.HeaderStyle> 
         <Style TargetType="{x:Type DataGridColumnHeader}"> 
          <Setter Property="FontWeight" Value="Bold" /> 
          <Setter Property="Foreground" Value="Yellow" /> 
          <Setter Property="Background" Value="Black" /> 
         </Style> 
        </DataGridHyperlinkColumn.HeaderStyle> 
       </DataGridHyperlinkColumn> 
      </DataGrid.Columns> 
     </DataGrid> 
+0

Oh, lex: LocTextExtension! Je me demandais récemment à quel point cette chose est populaire. :) – vines