我有一贯的风格:
<Style TargetType="{x:Type DataGrid}">
<Setter Property="ColumnHeaderStyle">
<Setter.Value>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="{x:Null}" /> <!-- this doesn't help, either -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Border Background="SomeTransparentColor" CornerRadius="20" Margin="5" />
...
问题是背景应用了两次:一次针对所有标题,一次针对完整标题行,一次针对每个标题分别应用。因为我使用部分透明的颜色,这看起来相当丑陋。
如何让WPF不要将此样式应用于整个标题行背景?
DataGrid列标题的默认样式将一个布局放在与列标题具有相同样式的所有列标题下面。添加此基础层,以便即使所有列标题的总和较小,标题区域也会明显填满整个水平空间。以下样式更改了方法但保留了要求并删除了基础层:
<Style TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<ItemsPresenter />
<DataGridColumnHeader x:Name="PART_FillerColumnHeader"
Grid.Column="1"
IsHitTestVisible="False" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>