Форматирование и стилизация столбцов DataGrid

49

Форматировать DataGridTextColumn можно таким же способом, что и элемент TextBlock, устанавливая свойства Foreground, FontFamily, FontSize, FontStyle и FontWeight. Однако DataGridTextColumn не поддерживает абсолютно все свойства, доступные у TextBlock. Например, в нем нельзя установить такое часто применяемое свойство, как Wrapping, чтобы создать столбец, отображающий несколько строк текста. Вместо этого понадобится использовать свойство ElementStyle.

По существу свойство ElementStyle позволяет применить стиль к соответствующему элементу внутри ячейки DataGrid. В случае простого DataGridTextColumn этим элементом будет TextBlock, в случае DataGridCheckBoxColumn — флажок, а в случае DataGridTemplateColumn — любой элемент, который был создан в шаблоне данных.

Ниже приведен простой стиль, включающий перенос текста в столбце:

<DataGridTextColumn Header="Описание" Binding="{Binding Path=Description}" Width="350">
        <DataGridTextColumn.ElementStyle>
               <Style TargetType="TextBlock">
                          <Setter Property="TextWrapping" Value="Wrap"></Setter>
               </Style>
        </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

Чтобы текст переносился, необходимо увеличить высоту строк. К сожалению, элемент управления DataGrid не способен изменять свои размеры так же гибко, как это умеют делать контейнеры компоновки в WPF. Поэтому потребуется задать фиксированную высоту для строк с помощью свойства DataGrid.RowHeight. Эта высота будет применяться ко всем строкам, каким бы ни был объем размещенного внутри них содержимого. На рисунке показан пример, в котором высота строк установлена в 70 единиц:

Перенос в тексте DataGrid

Чтобы применить один и тот же стиль к множеству столбцов, можно определить его в коллекции Resources и затем ссылаться на него в каждом столбце с использованием StaticResource.

С помощью свойства EditingElementStyle стиль применяется к элементу, который задействован при редактировании столбца. В случае DataGridTextColumn этим элементом будет TextBox.

ElementStyle и ElementEditingStyle и свойства столбцов предоставляют способ форматирования всех ячеек в любом конкретном столбце. Однако в некоторых случаях необходимо применить параметры форматирования к каждой ячейке в каждом столбце. Простейший способ сделать это заключается в конфигурировании стиля для свойства DataGrid.RowStyle. Кроме того, DataGrid имеет небольшой набор дополнительных свойств, которые позволяют форматировать другие части сетки, такие как заголовки столбцов и заголовки строк. Все свойства перечислены ниже:

ColumnHeaderStyle

Элемент TextBlock, используемый для отображения заголовков столбцов в верхней части сетки

RowHeaderStyle

Элемент TextBlock, используемый для отображения заголовков строк

DragIndicatorStyle

Элемент TextBlock, используемый для отображения заголовка столбца во время его перетаскивания в новую позицию

RowStyle

Элемент TextBlock, используемый для отображения обычных строк (строк в столбцах, которые не были настроены специальным образом через свойство ElementStyle соответствующего столбца)

Пройди тесты
Лучший чат для C# программистов