2011-01-19 2 views

ответ

3

Это зависит от того, где вы хотите эту двойную линию. Вертикальные GridLines рисуются в OnRender для DataGridCell, а горизонтальные GridLines рисуются в OnRender для DataGridCellsPresenter. Однако граница для DataGridColumnHeader сложнее. Это прямоугольник, который нарисован в методе RenderTheme в DataGridHeaderBorder, и я не думаю, что существует прямой способ изменить его ширину без повторного шаблонирования всего DataGridColumnHeader. Кроме того, толщина границ для заголовков в два раза больше, чем ячейки в DataGrid, чтобы начать с (1px против 2px), потому что заголовки рисуют свои разделители с обеих сторон.

Итак, чтобы получить толщину двойной линии, которая влияет только на ячейки, вы можете добавить специальный стиль DataGridCell, где вы хотите, чтобы это применимо. Все эти клеточные стили - это рисовать границу 1px слева в том же цвете, что и GridLines. Это будет выглядеть как этот

alt text

<DataGrid ... 
      HorizontalGridLinesBrush="Black"> 
    <DataGrid.Resources> 
     <Style x:Key="DoubleLeftBorderCell" TargetType="DataGridCell"> 
      <Setter Property="BorderThickness" Value="1,0,0,0"/> 
      <Setter Property="BorderBrush" Value="{Binding ElementName=dataGrid, Path=HorizontalGridLinesBrush}"/> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Double left Border" 
          CellStyle="{StaticResource DoubleLeftBorderCell}" 
          Binding="{Binding TextProperty}"/> 
    </DataGrid.Columns> 
</DataGrid> 

Там нет Mouseover эффект или что-нибудь на клетки, чтобы беспокоиться о. Если вы сделаете что-то подобное для DataGridColumnHeader, вы потеряете стрелки сортировки, эффект мыши, эффект mousedown и т. Д., Так что вам нужно будет создать для него весь шаблон

0

Вот что я в итоге сделал:

<DataGridTextColumn Header="Header Name"> 
    <DataGridTextColumn.CellStyle> 
     <Style TargetType="{x:Type DataGridCell}"> 
      <Setter Property="Margin" Value="1 0 0 0" /> 
      <Setter Property="BorderThickness" Value="1 0 0 0" /> 
      <Setter Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=HorizontalGridLinesBrush}" /> 
     </Style> 
    </DataGridTextColumn.CellStyle> 
</DataGridTextColumn> 

Это основано на ответе Meleak, но с добавлением наценки (для создания двойной линии эффекта) и используя RelativeSource для пограничной кисточки, убирая необходимость для DataGrid иметь топор: Имя.