2013-10-02 22 views
19

Muszę wyrównać tekst WPF DataGrid Column Header do Center. Stworzyłem styl i załączyłem go za pomocą właściwości HeaderStyle, jak poniżej.Wyrównaj nagłówek kolumny DataGrid do centrum

Style

<Window.Resources> 
    <Style x:Key="CenterGridHeaderStyle" TargetType="DataGridColumnHeader"> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    </Style> 
</Window.Resources> 

Kolumna

<DataGridTextColumn 
    Binding="{Binding Path=Name}" Header="Name" IsReadOnly="True" 
    HeaderStyle="{DynamicResource CenterGridHeaderStyle}"/> 

Ale nie jest to wyrównać kolumny tekstu nagłówka Center. Jak mogę to zrobić ?

+0

Można znaleźć odpowiedź: http://stackoverflow.com/questions/7943729/how-to-set-style-for-datagrid-header-in-wpf –

+0

Spróbuj tak: http : //stackoverflow.com/questions/7943729/how-to-set-style-for-datagrid-header-in-wpf –

Odpowiedz

43

Sprawdź to

<DataGridTextColumn Header="Nombre" 
          Binding="{Binding Nombre}"> 
<DataGridTextColumn.HeaderStyle> 
    <Style TargetType="DataGridColumnHeader"> 
    <Setter Property="HorizontalContentAlignment" 
       Value="Center" /> 
    </Style> 
</DataGridTextColumn.HeaderStyle> 
+0

Byłbym wdzięczny za każdy komentarz, dlaczego Twoje rozwiązanie działa, a nie rozwiązanie @Bishan. – Tatranskymedved

0

Spróbuj

<DataGridTextColumn.CellStyle> 
    <Style> 
    <Setter Property="HorizontalAlignment" Value="Center" /> 
    </Style> 
</DataGridTextColumn.CellStyle> 
+0

http://stackoverflow.com/a/18179080/2382032 –

0

Jest to odpowiedź na to zrobić programowo w AutoGeneratingColumn:

private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 
       e.Column.HeaderStyle = new Style(typeof(DataGridColumnHeader)); 
       e.Column.HeaderStyle.Setters.Add(new Setter(HorizontalContentAlignmentProperty, HorizontalAlignment.Center)); 

    } 

Tip, wykorzystanie atrybutów:

public class ColumnNameAttribute : Attribute 
{ 
    public HorizontalAlignment Alignment { get; set;} 
    public ColumnNameAttribute(HorizontalAlignment alignment){ 
     Alignment = alignment; 
} 

public class Example(){ 
    [ColumnName(HorizontalAlignment.Center)] 
    public string Column {get; set;} 
} 

private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    var desc = e.PropertyDescriptor as PropertyDescriptor; 
    var att = desc.Attributes[typeof(ColumnNameAttribute)] as ColumnNameAttribute; 
    if(att != null){ 
      e.Column.HeaderStyle = new Style(typeof(DataGridColumnHeader)); 
      e.Column.HeaderStyle.Setters.Add(new Setter(HorizontalContentAlignmentProperty, att.Alignment)); 
    } 

} 
0

Wylądowałem tutaj, szukając tego samego problemu dla ustawienia Nagłówki wierszy. W przypadku, gdy ktoś szukał, rozwiązanie jest proste:

<DataGrid.RowHeaderStyle> 
    <Style TargetType="DataGridRowHeader"> 
    <Style.Resources> 
     <Style TargetType="StackPanel"> 
     <Setter Property="HorizontalAlignment" Value="Center" /> 
     </Style> 
    </Style.Resources> 
    </Style> 
</DataGrid.RowHeaderStyle> 
0

Należy StaticResource zamiast DynamicResource w kolumnie:

Style

<Window.Resources> 
    <Style x:Key="CenterGridHeaderStyle" TargetType="DataGridColumnHeader"> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
    </Style> 
</Window.Resources> 

Kolumna

<DataGridTextColumn 
    Binding="{Binding Path=Name}" Header="Name" IsReadOnly="True" 
    HeaderStyle="{StaticResource CenterGridHeaderStyle}"/> 
Powiązane problemy