2011-01-19 8 views
1

DataGridの1つの列にカスタムグリッド線スタイルを設定するにはどうすればよいですか?特に、私は1つの列にその左の境界として二重線を持たせたいと思います。1つの列のみの特別なグリッド線スタイル

例:

| Col1 | Col2 || Col3 (w/ Double Left Border) | 

は、それはあなたがこの二重線を配置したい場所に依存し、
ベン

答えて

3

、ありがとうございました。垂直グリッド線は、DataGridCellの場合はOnRenderで、水平グリッド線の場合はDataGridCellsPresenterの場合はOnRenderで描画されます。しかし、DataGridColumnHeaderのボーダーはもっと複雑です。これはDataGridHeaderBorderRenderThemeメソッドで描画された長方形です。DataGridColumnHeader全体を再テンプレートせずに幅を変更する直接的な方法はないと思います。また、ヘッダーの境界線の太さは、ヘッダーがセパレーターを両側に描画するため、DataGridのセルの2倍の太さで始まります(1px vs 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> 

は、DataGridは斧を持っている必要がなくなり、国境ブラシ用RelativeSourceを使用し、(二重線効果を作成します)。

関連する問題