标题说明了一切。如何在仍然继承我不覆盖的属性的默认样式值的同时在DataGrid的列标题中应用自定义样式?我已经尝试过this SO post中给出的方法,但它似乎并不适用于我的情况。我的列标题看起来与默认标题略有不同。这是我的XAML:
<Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="BorderThickness" Value="0,0,1,0" />
</Style>
这是输出:
如您所见,左列(具有自定义样式)没有填充,与具有默认样式的右列不同。有线索吗?
(我当然可以在我的风格中设置填充以获得我想要的外观;我只需要知道为什么它没有继承默认控件样式的填充。)
重现错误的示例代码
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<DataGrid AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Width="100" Header="No Padding">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="BorderThickness" Value="0,0,1,0" />
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="100" Header="Padding" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
答案 0 :(得分:0)
我使用Blend检查DataGridColumnHeader的Template。我注意到在Template中使用的是DataGridHeaderBorder,它派生自Border。
http://msdn.microsoft.com/en-us/library/microsoft.windows.themes.datagridheaderborder(v=vs.110).aspx
有注释&#34;如果在DataGrid上设置了Background或BorderBrush属性,则渲染将恢复为默认的Border实现。&#34;它解释了你的问题。
DataGridHeaderBorder重写OnRender方法并根据Background或BorderBrush是否为null呈现不同的标头。在一种情况下,OnRender方法添加Padding,而在第二种情况下不添加。
http://referencesource.microsoft.com/#PresentationFramework.Aero/DataGridHeaderBorder.cs,257