这个问题是这个问题的续集: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>
上面的代码显示Style
和DataGridColumnHeader
的{{1}}。触发器按照我的要求工作,但有一些我不喜欢的小事。我现在就在这下面。
已删除图片。
这里的问题是第一个单元格左边有一个边框。原因很清楚,因为我的代码中有这个:DataGridColumnHeadersPresenter
。
已删除图片。
第二个问题出在标题右侧。如果我在单元格上BorderThickness="1 0 0 0"
,则触发器将单元格设置为灰色。您可以看到灰色覆盖Hover
边框,因为这些单元格是矩形的,DataGridColumnHeadersPresenter
有圆角。
已删除图片。
我几乎拥有我想要的东西,那就是:
答案 0 :(得分:0)
我的问题的解决方案是在我的代码中分配样式而不是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);
}
}