列 header 背景 -- 但不是两次
Column header background -- but not twice
我一贯作风:
<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" />
...
问题是背景被应用 两次: 一次是所有 header 在一起,整个 header 行,一次是每个 header 分别。因为我用了半透明的颜色,所以看起来比较难看。
如何防止 WPF 将此样式也应用于整个 header 行背景?
DataGrid 列 Header 的默认样式将一个布局放在所有列 header 下方,这些列具有与列 header 相同的样式。添加此基础层,以便 header 区域明显填满整个水平 space,即使所有列 header 的总和较小。以下样式更改了方法但保留了要求并删除了基础层:
<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>
我一贯作风:
<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" />
...
问题是背景被应用 两次: 一次是所有 header 在一起,整个 header 行,一次是每个 header 分别。因为我用了半透明的颜色,所以看起来比较难看。
如何防止 WPF 将此样式也应用于整个 header 行背景?
DataGrid 列 Header 的默认样式将一个布局放在所有列 header 下方,这些列具有与列 header 相同的样式。添加此基础层,以便 header 区域明显填满整个水平 space,即使所有列 header 的总和较小。以下样式更改了方法但保留了要求并删除了基础层:
<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>