2011-01-19 6 views

답변

3

그것은 당신이 이중 라인을 원하는 위치에 따라 달라집니다. 수직 GridLine은 DataGridCell에 대해 OnRender으로 그려지고, 수평 GridLines는 DataGridCellsPresenter에 대해 OnRender으로 그려집니다. 그러나 DataGridColumnHeader의 경계는 더 복잡합니다. 그것은 DataGridHeaderBorderRenderTheme 메서드로 그려진 Rectangle입니다. 전체 DataGridColumnHeader을 다시 템플릿하지 않고도 너비를 변경할 수있는 방법은 없다고 생각합니다. 또한 헤더의 경계선 두께는 DataGrid의 셀 수 (두꺼운 대 2px)의 두 배입니다. 헤더가 양쪽에 구분 기호를 사용하기 때문입니다.

셀에 영향을주는 이중 선 두께를 얻으려면이 값을 적용하려는 특수 DataGridCell 스타일을 추가 할 수 있습니다. 이 모든 셀 스타일은 GridLines와 동일한 색상으로 왼쪽에 1px 테두리를 그립니다. 그것은 걱정할 세포에 마우스 오버 효과 나 아무것도 없다이

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> 

처럼 보일 것이다. 그러나 DataGridColumnHeader과 유사한 작업을 수행하는 경우 분류 화살표, 마우스 오버 효과, 마우스 다운 효과 등을 잃게됩니다. 따라서 전체 템플릿을 만들어야합니다.

0

다음은 내가 수행 한 작업입니다.

이름 : 이것은 Meleak의 대답에 있지만 마진의 추가를 기반으로
<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> 

는 데이터 그리드가 도끼를 할 필요성을 제거, 국경 브러시에 대한 RelativeSource를 사용하여 (이중 라인 효과를 만들 수 있습니다).

관련 문제