Создать стиль для TextBlock в DataGridTextColumn
Я хочу создать глобальный стиль, который устанавливает VerticalAlignment
в Center
для всех TextBlock
контролирует внутри DataGrid
или внутри DataGridTextColumn
,
Я не хочу копировать следующее в каждый DataGridTextColumn
потому что это кажется повторяющимся.
<DataGridTextColumn Header="Some Property" Binding="{Binding SomeProperty}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
Я пробовал что-то вроде следующего, но это не работает, потому что DataGridTextColumn
не наследуется от FrameworkElement
или же FrameworkContentElement
, DataGrid
само по себе, но любая дальнейшая упаковка, которую я пытаюсь, приводит к ошибкам:
<Style TargetType="DataGridTextColumn">
<Setter Property="ElementStyle">
<Setter.Value>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
</Setter.Value>
</Setter>
</Style>
3 ответа
Вы можете определить CellStyle
как показано ниже:
<Style x:Key="DataGridCellStyle" TargetType="DataGridCell">
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
И назначьте его в DataGrid: CellStyle="{StaticResource DataGridCellStyle}"
, Таким образом, все ваши клетки будут сосредоточены на содержании.
РЕДАКТИРОВАТЬ: приведенный выше код из одного из моих проектов, а также содержит код для удаления линий сетки в DataGrid. Вы можете получить их обратно, изменив Grid
в Border
в шаблоне. Как это:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
Создать стиль как статический ресурс
<UserControl.Resources>
<Style x:Key="verticalCenter" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</UserControl.Resources>
Затем вы можете назначить его ElementStyle объекта DataGridTextColumn
<DataGridTextColumn ElementStyle="{StaticResource verticalCenter}" />
Просто используйте DataGridTemplateColumn
:
<DataGridTemplateColumn Width="SizeToCells">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Center" Width="100" Height="20"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>