DataGridColumnHeader样式续

时间:2014-07-22 11:47:32

标签: wpf xaml styles

这个问题是这个问题的续集: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>

上面的代码显示StyleDataGridColumnHeader的{​​{1}}。触发器按照我的要求工作,但有一些我不喜欢的小事。我现在就在这下面。

已删除图片。

这里的问题是第一个单元格左边有一个边框。原因很清楚,因为我的代码中有这个:DataGridColumnHeadersPresenter

已删除图片。

第二个问题出在标题右侧。如果我在单元格上BorderThickness="1 0 0 0",则触发器将单元格设置为灰色。您可以看到灰色覆盖Hover边框,因为这些单元格是矩形的,DataGridColumnHeadersPresenter有圆角。

已删除图片。

我几乎拥有我想要的东西,那就是:

  • 整个标题周围有一个圆角的大边框。
  • 每个标题单元格之间的1 px行。
  • 悬停在外边框内的悬停效果。

1 个答案:

答案 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);
        }
    }