wake-up-neo.com

Textausrichtung in einem WPF-DataGrid

Wie kann ich die Spaltendaten in einer WPF DataGrid auf das Zentrum ausrichten?

49
Prashant C

Es ist schwer zu sagen, ohne genau zu wissen, aber hier ist eine DataGridTextColumn, die zentriert ist:

<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
Kent Boogaart

Wenn Sie DataGridTextColumn verwenden, können Sie das folgende Code-Snippet verwenden:

<Style TargetType="DataGridCell">
     <Style.Setters>
            <Setter Property="TextBlock.TextAlignment" Value="Center" />
     </Style.Setters>
</Style>
87

Ich begann mit der Lösung von Huttelihut. Leider hat das für mich noch nicht funktioniert. Ich korrigierte seine Antwort und kam dazu (die Lösung besteht darin, den Text nach rechts auszurichten):

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

Wie Sie sehen, habe ich den Stil auf einen TextBlock angewendet, nicht auf die DataGridCell.

Und dann musste ich den Element Stil einstellen, nicht den Cell Stil.

ElementStyle="{StaticResource RightAligned}"
19
Jan

+1 für Kent Boogaart . Am Ende habe ich das getan, was den Code etwas unübersichtlich macht (und mir erlaubt, das Alignment für mehrere Spalten zu verwenden):

<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>
14
T.J.Kjaer

Hier ist @ MohammedAFadils XAML-Antwort, umgewandelt in C # -Code hinter:

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

Um die Variable Style anzuwenden, legen Sie die Eigenschaft CellStyle der Variablen DataGrid fest, z.

var MyGrid = new DataGrid() {
    CellStyle = MyStyle
};
9
Danny Beckett

Oder im Code hinter: 

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
Hans

Am Ende hatte ich Probleme, dass die Zelle verschoben wurde und die akzeptierte Antwort funky sah. Ich weiß, es ist spät, aber ich hoffe, dass meine Ergebnisse jemandem helfen werden. Ich benutze:

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

eher als der CellStyle. 

3
Rachael

Meine Lieblingslösung ist:

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

1
Web Developer

Ok, ich habe den frameworkElement-Ansatz verwendet, aber es gab ein seltsames Verhalten, wenn Sie versuchen, die Zeile hervorzuheben. 

Ich habe ein weiteres Beispiel für die Ausrichtung von WPF-Datagrid in diesen Thread !

1
Junior M

Bei mir funktioniert das gut

<DataGridTextColumn Width="1*" Binding="{Binding Balance, StringFormat=C} "Header="Balance">
  <DataGridTextColumn.CellStyle>
      <Style>
        <Setter Property="TextBlock.TextAlignment"  Value="Right"/>
      </Style>
   </DataGridTextColumn.CellStyle>
 </DataGridTextColumn>
0
Bruno Henn

Danke an Danny Beckett für die Konvertierung der @AMAMAFadil-XAML-Antwort, konvertiert in C # -Code. Alle meine Datagrids werden dynamisch eingerichtet, sodass ich alles jederzeit ändern kann. 

Um ein leeres Datagrid einzurichten, mit nichts darin und dann einfach an Daten zu binden, nehmen Sie einfach Ihre Datagrid-Spalten

        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
Stephen Himes