Alignement de texte dans un DataGrid WPF

Comment puis-je aligner les données de colonne au centre dans un WPF DataGrid?

47
demandé sur Danny Beckett 2009-04-06 13:13:41

10 réponses

C'est difficile à dire sans connaître les détails, mais voici un DataGridTextColumn est centré:

<wpf:DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True">
    <wpf:DataGridTextColumn.CellStyle>
        <Style>
            <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
        </Style>
    </wpf:DataGridTextColumn.CellStyle>
</wpf:DataGridTextColumn>
43
répondu Kent Boogaart 2011-09-27 15:04:22

Si vous utilisez DataGridTextColumn vous pouvez utiliser l'extrait de code suivant:

<Style TargetType="DataGridCell">
     <Style.Setters>
            <Setter Property="TextBlock.TextAlignment" Value="Center" />
     </Style.Setters>
</Style>
82
répondu Mohammed A. Fadil 2011-05-03 06:25:45

J'ai commencé avec la solution de huttelihut. Malheureusement, cela n'a pas encore fonctionné pour moi. J'ai modifié sa réponse et j'ai trouvé ceci (la solution est d'aligner le texte vers la droite):

<Resources>
    <Style x:Key="RightAligned" TargetType="TextBlock">
        <Setter Property="HorizontalAlignment" Value="Right"/>
    </Style>
</Resources>

Comme vous pouvez le voir, j'ai appliqué le style à un TextBlock, pas à DataGridCell.

{[2]) Et ensuite, j'ai dû mettre le Élément de style, pas la Cellule style.
ElementStyle="{StaticResource RightAligned}"
17
répondu Jan 2013-05-09 10:17:09

+1 pour Kent Boogaart. J'ai fini par le faire, ce qui rend le code légèrement moins encombré (et me permet d'utiliser l'alignement sur plusieurs colonnes):

<Resources>
      <Style x:Key="NameCellStyle" TargetType="DataGridCell">
                <Setter Property="HorizontalAlignment" Value="Center" />
      </Style>
</Resources>


<DataGrid.Columns>                           
   <DataGridTextColumn Header="Name" CellStyle="{StaticResource NameCellStyle}" Binding="{Binding Name}"/>                            
    // .. other columns        
</DataGrid.Columns>
13
répondu T.J.Kjaer 2011-03-28 08:15:46

Voici la réponse XAML de @MohammedAFadil, convertie en code C# derrière:

var MyStyle = new Style(typeof(DataGridCell)) {
    Setters = {
        new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center)
    }
};

Pour appliquer le Style, Définissez la propriété CellStyle du DataGrid, par exemple

var MyGrid = new DataGrid() {
    CellStyle = MyStyle
};
9
répondu Danny Beckett 2014-08-26 14:04:06

Ou dans le code derrière:

grid.CellStyle = newCellStyle();

public static Style newCellStyle()
{
    //And here is the C# code to achieve the above
    System.Windows.Style style = new Style(typeof(DataGridCell));
    style.Setters.Add(new System.Windows.Setter
    {
        Property = Control.HorizontalAlignmentProperty,
        Value = HorizontalAlignment.Center
    });
    return style;
}
4
répondu Hans 2012-08-23 12:31:04

J'ai fini par avoir des problèmes avec le déplacement de la cellule et l'air funky en utilisant la réponse acceptée. Je sais qu'il est tard, mais j'espère que mes résultats aideront quelqu'un. J'utilise:

<DataGridTextColumn.ElementStyle>
     <Style>
          <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
     </Style>

Plutôt que le CellStyle.

3
répondu Rachael 2013-07-03 15:12:38

Ok, j'ai utilisé l'approche frameworkElement mais il y avait un comportement étrange lorsque vous essayez de mettre en évidence la ligne.

J'ai mis un autre exemple D'alignement de Datagrid WPF dans cethread !

1
répondu Junior M 2017-05-23 12:26:11

Ma solution préférée est:

<DataGridTextColumn Header="My Column" Binding="{Binding MyDBValue}" Width="100" >
<DataGridTextColumn.CellStyle>
        <Style>
                <Setter Property="FrameworkElement.HorizontalAlignment" Value="Center"/>
        </Style>
</DataGridTextColumn.CellStyle>

1
répondu Web Developer 2011-07-09 15:06:40

Merci Danny Beckett pour avoir converti la réponse XAML de @MohammedAFadil, convertie en code C#. Tous mes datagrids sont configurés dynamiquement, donc je peux changer n'importe quoi, n'importe quand.

Pour configurer un datagrid vide, sans rien dedans et ensuite le lier aux données, prenez simplement votre datagrid.colonnes

        var centerTextSetter = new Style(typeof(DataGridCell))
        {
            Setters = { new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Center) }
        };
        DgDbNames.Columns.Add(new DataGridTextColumn()
        {
            Header = "Db Name",
            Binding = new System.Windows.Data.Binding("DbName"),
            IsReadOnly = true,
            Width = new DataGridLength(0.2, DataGridLengthUnitType.Star),
            CellStyle = centerTextSetter
        });
0
répondu Stephen Himes 2017-10-18 20:21:21