DataGridの1つの列にカスタムグリッド線スタイルを設定するにはどうすればよいですか?特に、私は1つの列にその左の境界として二重線を持たせたいと思います。1つの列のみの特別なグリッド線スタイル
例:
| Col1 | Col2 || Col3 (w/ Double Left Border) |
は、それはあなたがこの二重線を配置したい場所に依存し、
ベン
DataGridの1つの列にカスタムグリッド線スタイルを設定するにはどうすればよいですか?特に、私は1つの列にその左の境界として二重線を持たせたいと思います。1つの列のみの特別なグリッド線スタイル
例:
| Col1 | Col2 || Col3 (w/ Double Left Border) |
は、それはあなたがこの二重線を配置したい場所に依存し、
ベン
、ありがとうございました。垂直グリッド線は、DataGridCell
の場合はOnRender
で、水平グリッド線の場合はDataGridCellsPresenter
の場合はOnRender
で描画されます。しかし、DataGridColumnHeader
のボーダーはもっと複雑です。これはDataGridHeaderBorder
のRenderTheme
メソッドで描画された長方形です。DataGridColumnHeader
全体を再テンプレートせずに幅を変更する直接的な方法はないと思います。また、ヘッダーの境界線の太さは、ヘッダーがセパレーターを両側に描画するため、DataGrid
のセルの2倍の太さで始まります(1px vs 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
の場合は同様の操作を行いますが、ソート矢印、マウスオーバーエフェクト、マウスダウンエフェクトなどは失われますので、テンプレート全体を作成する必要があります
ここで私は何をしたのですか:
名:これは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を使用し、(二重線効果を作成します)。