protected override void OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs e) { if (e.PropertyName == "Description") { e.Cancel = true; DataGridTemplateColumn descColumn = new DataGridTemplateColumn(); DataTemplate headerTemplate = new DataTemplate(); FrameworkElementFactory headerFactory = new FrameworkElementFactory(typeof(TextBlock)); headerTemplate.VisualTree = headerFactory; headerFactory.SetValue(TextBlock.TextProperty, e.PropertyName); DataTemplate textTemplate = new DataTemplate(); FrameworkElementFactory textFactory = new FrameworkElementFactory(typeof(TextBlock)); textTemplate.VisualTree = textFactory; textFactory.SetBinding(TextBlock.TextProperty, new Binding(e.PropertyName) { Mode = BindingMode.OneWay }); textFactory.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Center); descColumn.Width = SetColumnWidth(25); descColumn.HeaderTemplate = headerTemplate; descColumn.CellTemplate = textTemplate; Columns.Add(descColumn); } else { base.OnAutoGeneratingColumn(e); } } 

How to center the title? As with the cell does not work

    2 answers 2

    XAML

     <DataGrid> <DataGrid.Columns> <DataGridTemplateColumn Header="Название заголовка"> <DataGridTemplateColumn.HeaderStyle> <Style TargetType="DataGridColumnHeader"> <Setter Property="HorizontalContentAlignment" Value="Center" /> </Style> </DataGridTemplateColumn.HeaderStyle> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> 

    C #

     private static DataGridColumnHeader GetHeader(DataGridColumn column, DependencyObject reference) { for (var i = 0; i < VisualTreeHelper.GetChildrenCount(reference); i++) { var child = VisualTreeHelper.GetChild(reference, i); var colHeader = child as DataGridColumnHeader; if ((colHeader != null) && (colHeader.Column == column)) return colHeader; colHeader = GetHeader(column, child); if (colHeader != null) return colHeader; } return null; } 

    Call example

     var columnHeader = GetHeader(DataGrid1.Columns[0], DataGrid1); columnHeader.HorizontalContentAlignment = HorizontalAlignment.Center; 
    • For C # there is no example? - DenisJNewb
     protected override void OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs e) { Style cellStyle = new Style(typeof(DataGridColumnHeader)); cellStyle.Setters.Add(new Setter() { Property = HorizontalContentAlignmentProperty, Value = HorizontalAlignment.Center }); e.Column.HeaderStyle = cellStyle; base.OnAutoGeneratingColumn(e); }