DataGridの1つの列だけにカスタムグリッド線種を設定するにはどうすればよいですか?特に、1つの列の左側の境界線として二重線を使用したいと思います。
例:
| Col1 | Col2 || Col3 (w/ Double Left Border) |
ありがとう、
ベン
この二重線が必要な場所によって異なります。垂直方向のGridLinesはに描画さOnRender
れDataGridCell
、水平方向のGridLinesはに描画さOnRender
れDataGridCellsPresenter
ます。ただし、の境界DataGridColumnHeader
はより複雑です。RenderTheme
のメソッドで描画されるのは長方形でDataGridHeaderBorder
あり、全体を再テンプレート化せずに幅を変更する直接的な方法はないと思いますDataGridColumnHeader
。また、ヘッダーの境界線の太さは、最初のセルの2倍の太さですDataGrid
(1pxと2px)。これは、ヘッダーが両側にセパレーターを描画するためです。
したがって、セルに影響を与える二重線の太さを取得するには、DataGridCell
これを適用する特別なスタイルを追加できます。このセルスタイルは、GridLinesと同じ色で左側に1pxの境界線を描画するだけです。こんな感じになります
<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
、並べ替え矢印、マウスオーバー効果、マウスダウン効果などが失われるため、テンプレート全体を作成する必要があります。
これが私がやったことです:
<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にax:Nameが必要ありません。