tim*_*use 12 wpf datagrid styles datagridtextcolumn
我想创建一个全局样式,为a 内部或内部的所有控件设置VerticalAlignmentto .CenterTextBlockDataGridDataGridTextColumn
我不想将以下内容复制到每个中,DataGridTextColumn因为它感觉重复.
<DataGridTextColumn Header="Some Property" Binding="{Binding SomeProperty}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)
我试过类似下面的东西,但它不起作用,因为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>
Run Code Online (Sandbox Code Playgroud)
Mic*_*ger 20
将样式创建为静态资源
<UserControl.Resources>
<Style x:Key="verticalCenter" TargetType="{x:Type TextBlock}">
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其分配给DataGridTextColumn的ElementStyle
<DataGridTextColumn ElementStyle="{StaticResource verticalCenter}" />
Run Code Online (Sandbox Code Playgroud)
Gil*_*dor 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>
Run Code Online (Sandbox Code Playgroud)
并将其分配给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>
Run Code Online (Sandbox Code Playgroud)