2

DataGridの1つの列だけにカスタムグリッド線種を設定するにはどうすればよいですか?特に、1つの列の左側の境界線として二重線を使用したいと思います。

例:

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

ありがとう、
ベン

4

2 に答える 2

4

この二重線が必要な場所によって異なります。垂直方向のGridLinesはに描画さOnRenderDataGridCell、水平方向のGridLinesはに描画さOnRenderDataGridCellsPresenterます。ただし、の境界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、並べ替え矢印、マウスオーバー効果、マウスダウン効果などが失われるため、テンプレート全体を作成する必要があります。

于 2011-01-19T22:59:29.553 に答える
2

これが私がやったことです:

<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が必要ありません。

于 2011-01-20T16:29:26.260 に答える