Неверное выравнивание ячеек в 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>
Выравнивание ячеек с данными происходит корректно с первоначальным кодом:
Однако стоит только убрать выравнивание влево для ячеек колонок "Имя" и "Фамилия", как текст сразу начинает съезжать:
<!-- Стиль выравнивания влево убран -->
<DataGridTextColumn Header="Имя" Binding="{Binding Name}" Width="100"/>
<DataGridTextColumn Header="Фамилия" Binding="{Binding Surname}" Width="100"/>
Хотя он должен был выровниться по центру, как это (успешно) произошло с другими колонками.
Почему это происходит только с этими колонками? С чем это связано?
Ответы (1 шт):
Ответ: оказалось, ошибка заключалась во вставленных данных в БД — нужно было проверить их корректность.
Подробнее:
Почему-то в поля "Имя" и "Фамилия" данные вставились с кучей пробелов после слова, о чём свидетельствует многоточие у поля:
Вывод: нужно проверять корректность данных путём отлаживания. Мне помогло создание записей вручную, по типу:
object[][] ContactsInfo =
[
[ 1, "+7 (917) 363-53-08", "Рабочий", "Анна", "Ильюшина", "Васильевна", '?' ],
[ 2, "+7 (915) 223-33-63", "Мобильный", "Кирилл", "Андреев", "—", '?' ],
[ 3, "+7 (929) 148-02-58", "Мобильный", "Денис", "Никитин", "Прокофьевич", '?' ]
/* Остальные записи */
];
А потом я просто добавил эти данные в List<T>
, объединил этот список со списком данных, загружаемых из БД, и добавил их в ObserveContactsPageDataGrid.ItemsSource
.
Как раз видна проблемная запись 5 (Фамилия — Горин)