Содержимое центральной ячейки сетки данных с привязкой к контексту WPF

#c# #wpf #datagrid

#c# #wpf #сетка данных

Вопрос:

У меня есть сетка данных, ItemsSource свойство которой привязано к свойству в моей viewmodel. Это свойство представляет собой список объектов и динамически устанавливается после нажатия кнопки, при этом элементы в сетке данных заполняются правильно, а столбцы генерируются автоматически. Однако содержимое ячеек выровнено по верхнему левому краю, и все найденные мной решения «Как центрировать содержимое ячейки DataGrid» предназначены только для DataGrid с предопределенными вручную столбцами, в то время как мои генерируются на основе свойств класса, к которому принадлежат объекты в свойстве.

Как центрировать содержимое ячейки сетки данных, когда столбцы автоматически генерируются на основе свойств класса загруженных в него объектов?

Ответ №1:

Для настройки столбца можно использовать событие AutoGeneratingColumn.

https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagrid.autogeneratingcolumn?view=net-5.0

Ответ №2:

Вы можете создать ElementStyle либо в своей разметке XAML, либо программно, а затем обработать AutoGeneratingColumn событие для DataGrid :

 public partial class Window1 : Window
{
    private static readonly Style s_elementStyle;

    static Window1()
    {
        const string Xaml = "<Style xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" TargetType="TextBlock">"  
            "<Setter Property="HorizontalAlignment" Value="Center" />"  
            "<Setter Property="VerticalAlignment" Value="Center" />"  
            "</Style>";

        s_elementStyle = XamlReader.Parse(Xaml) as Style;
    }

    public Window1()
    {
        InitializeComponent();
        dataGrid.AutoGeneratingColumn  = dg_AutoGeneratingColumn
    }

    private void dg_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        if (e.Column is DataGridTextColumn textColumn)
            textColumn.ElementStyle = s_elementStyle;
    }
}