Alignement de texte dans un DataGrid WPF
Comment puis-je aligner les données de colonne au centre dans un WPF DataGrid
?
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>
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>
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}"
+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>
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
};
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;
}
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.
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>
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
});