Неверное выравнивание ячеек в DataGrid

Есть стиль HorizontallyCenteredCellStyle:

<Style x:Key="HorizontallyCenteredCellStyle" TargetType="DataGridCell">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridCell">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Center"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Стиль LeftAlignedCellStyle:

<Style x:Key="LeftAlignedCellStyle" TargetType="DataGridCell" BasedOn="{StaticResource HorizontallyCenteredCellStyle}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridCell">
                <Grid Background="{TemplateBinding Background}">
                    <ContentPresenter HorizontalAlignment="Left"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
     </Setter>
</Style>

И есть Xaml-разметка DataGrid, куда загружаются данные из БД:

<DataGrid x:Name="ObserveContactsPageDataGrid" Grid.Row="1" AutoGenerateColumns="False" IsReadOnly="True">
    
    <DataGrid.ColumnHeaderStyle>
        <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource HorizontallyCenteredHeaderStyle}"/>
    </DataGrid.ColumnHeaderStyle>
    
    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell" BasedOn="{StaticResource HorizontallyCenteredCellStyle}"/>
    </DataGrid.CellStyle>
    
    <DataGrid.Columns>
        <DataGridTextColumn Header="№" Binding="{Binding ID}" Width="Auto"/>
        <DataGridTextColumn Header="Номер телефона" Binding="{Binding PhoneNumber}" Width="Auto"/>
        <DataGridTextColumn Header="Тип телефона" Binding="{Binding PhoneType}" Width="Auto"/>
        <DataGridTextColumn Header="Имя" Binding="{Binding Name}" CellStyle="{StaticResource LeftAlignedCellStyle}" Width="100"/>
        <DataGridTextColumn Header="Фамилия" Binding="{Binding Surname}" CellStyle="{StaticResource LeftAlignedCellStyle}" Width="100"/>
        <DataGridTextColumn Header="Отчество" Binding="{Binding Patronymic}" Width="Auto"/>
        <DataGridTextColumn Header="Пол" Binding="{Binding Sex}" Width="Auto"/>
    </DataGrid.Columns>
    
</DataGrid>

Выравнивание ячеек с данными происходит корректно с первоначальным кодом: Корректное отображение данных в DataGrid

Однако стоит только убрать выравнивание влево для ячеек колонок "Имя" и "Фамилия", как текст сразу начинает съезжать:

<!-- Стиль выравнивания влево убран -->
<DataGridTextColumn Header="Имя" Binding="{Binding Name}" Width="100"/>
<DataGridTextColumn Header="Фамилия" Binding="{Binding Surname}" Width="100"/>

Некорректное отображение данных в DataGrid

Хотя он должен был выровниться по центру, как это (успешно) произошло с другими колонками.

Почему это происходит только с этими колонками? С чем это связано?


Ответы (1 шт):

Автор решения: Chaos_Sower

Ответ: оказалось, ошибка заключалась во вставленных данных в БД — нужно было проверить их корректность.

Подробнее:

Почему-то в поля "Имя" и "Фамилия" данные вставились с кучей пробелов после слова, о чём свидетельствует многоточие у поля:

Запись с неверным форматом

Отображение записи с неверным форматом

Вывод: нужно проверять корректность данных путём отлаживания. Мне помогло создание записей вручную, по типу:

object[][] ContactsInfo =
[
    [ 1, "+7 (917) 363-53-08", "Рабочий", "Анна", "Ильюшина", "Васильевна", '?' ],
    [ 2, "+7 (915) 223-33-63", "Мобильный", "Кирилл", "Андреев", "—", '?' ],
    [ 3, "+7 (929) 148-02-58", "Мобильный", "Денис", "Никитин", "Прокофьевич", '?' ]
    /* Остальные записи */        
];

А потом я просто добавил эти данные в List<T>, объединил этот список со списком данных, загружаемых из БД, и добавил их в ObserveContactsPageDataGrid.ItemsSource.

Вот результат: Объединённый вывод данных в DataGrid

Как раз видна проблемная запись 5 (Фамилия — Горин)

→ Ссылка