这个问题是这个问题的续集:DataGridColumnHeader Style
<Style TargetType="DataGridColumnHeader">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Border BorderBrush="#DBDBDB"
BorderThickness="1 0 0 0"
Background="#00ECECEC"
Padding="3">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
<Border.Triggers>
...
</Border.Triggers>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
上面的代码显示了DataGridColumnHeader
和DataGridColumnHeadersPresenter
的Style
。触发器按我想要的方式工作,但有一些小事情我不喜欢。这就是我现在所拥有的
图片删除。
这里的问题是第一个单元格的左边有一个边框。这样做的原因很清楚,因为我的代码中有这个:BorderThickness="1 0 0 0"
。
图片删除。
第二个问题在标题的右边。如果我在一个单元格上设置Hover
,触发器将该单元格颜色为灰色。你可以看到灰色覆盖在DataGridColumnHeadersPresenter
的边框上,因为这些单元格是矩形的,而DataGridColumnHeadersPresenter
是圆角的。
图片删除。
我就要得到我想要的了,那就是:
- 在整个头部周围使用圆角的大边框。
- 每个页眉单元格之间的1px行
- 停留在外部边框内的悬停效果。
我的问题的解决方案是在我的代码后面分配样式,而不是xaml本身。下面是代码:
if (gridColumns.Count > 0)
{
for (int i = 0; i < gridColumns.Count; i++)
{
DataGridTextColumn column = new DataGridTextColumn();
column.Header = gridColumns[i].ColumnName;
column.Binding = new Binding(gridColumns[i].ColumnBinding);
if (i == 0)
column.HeaderStyle = (Style)this.FindResource("ColumnHeaderStyleLeft");
else if (i == gridColumns.Count - 1)
column.HeaderStyle = (Style)this.FindResource("ColumnHeaderStyleRight");
else
column.HeaderStyle = (Style)this.FindResource("ColumnHeaderStyleCenter");
dataGrid.Columns.Add(column);
}
}