我想创建一个全局样式,为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>
答案 0 :(得分:17)
将样式创建为静态资源
<UserControl.Resources>
<Style x:Key="verticalCenter" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</UserControl.Resources>
然后,您可以将其分配给DataGridTextColumn的
<DataGridTextColumn ElementStyle="{StaticResource verticalCenter}" />
答案 1 :(得分:11)
您可以定义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>
答案 2 :(得分:1)
只需使用DataGridTemplateColumn
:
<DataGridTemplateColumn Width="SizeToCells">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock HorizontalAlignment="Center" Width="100" Height="20"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>