2014-12-27 5 views
0

В названии говорится все. Как применить пользовательский стиль в заголовке столбца 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> 

Вот вывод:

enter image description here

Как вы можете видеть, левая колонка (это имеет собственный стиль) не имеют отступов, в отличии от правого столбца, стиль по умолчанию , Любые подсказки?

(Я могу, конечно, установить прописку в моем стиле, чтобы получить внешний вид, который я хочу, мне просто нужно знать, почему он не унаследовал отступы из стиля управления по умолчанию).

Пример кода воспроизвести ошибку

<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

Не могли бы вы поделиться кодом xaml, который показывает, как вы применяете этот особый стиль к столбцу? – user2250152

+0

@ user2250152: Добавлен простой пример, чтобы воспроизвести то, о чем я говорю. – dotNET

ответ

0

Я использовал Blend, чтобы проверить шаблон DataGridColumnHeader. Я заметил, что в шаблоне используется DataGridHeaderBorder, который происходит из Border.
http://msdn.microsoft.com/en-us/library/microsoft.windows.themes.datagridheaderborder(v=vs.110).aspx
Существует замечание «Если в DataGrid установлены свойства Background или BorderBrush, рендеринг возвращается к реализации по умолчанию Border». и это объясняет вашу проблему.
DataGridHeaderBorder переопределяет метод OnRender и отображает заголовок по-разному в зависимости от того, является ли Background или BorderBrush нулевым или нет. В одном случае метод OnRender добавляет Padding, а во втором случае не добавляет.
http://referencesource.microsoft.com/#PresentationFramework.Aero/DataGridHeaderBorder.cs,257

+0

Имеет смысл. Спасибо за рытье. Так что, похоже, мне придется жить с ручным переопределением его в моем стиле. – dotNET