Стилизация столбцов на основе DataGridTemplateColumn в WPF DataGrid - PullRequest
3 голосов
/ 25 апреля 2010

Я использую WPF DataGrid, где для одного из столбцов требуется указывать гиперссылку «Редактировать», если строка является редактируемой - это обозначается логическим флагом в модели поддержки строки. Мне удалось добиться этого с помощью DataGridTemplateColumn - никаких проблем. Однако дополнительное требование для всей строки не должно отображать какие-либо выделения при выборе строки (по умолчанию это синий фон). Мне удалось добиться этого в других столбцах, определив стиль DataGridCell с прозрачным фоном, например

<DataGridTextColumn
    Header="Id"
    Binding="{Binding Path=Id}"
    HeaderStyle="{StaticResource DataGridColumnHeaderStyle}"
    CellStyle="{StaticResource DataGridCellStyle}" />

где DataGridCellStyle определяется следующим образом:

<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
    <Setter Property="Background" Value="Transparent" />
    ...
</Style>

Однако рассматриваемый столбец, DataGridTemplateColumn, не предлагает атрибут «CellStyle», который я могу использовать для отключения подсветки выделения. Итак, мой вопрос, как установить стиль ячейки при использовании DataGridTemplateColumn? Вот моя реализация столбца, который удовлетворяет первому требованию (то есть показывает гиперссылку «Редактировать», если строка редактируема):

<DataGridTemplateColumn
    Header="Actions"
    HeaderStyle="{StaticResource CenterAlignedColumnHeaderStyle}">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock
                Visibility="{Binding Path=Editable, Converter={StaticResource convVisibility}}"
                Style="{StaticResource CenterAlignedElementStyle}">
                    <Hyperlink
                        Command="..."
                        CommandParameter="{Binding}">
                        <TextBlock Text="Edit" />
                    </Hyperlink>
            </TextBlock>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Спасибо.

1 Ответ

4 голосов
/ 25 апреля 2010

По крайней мере, в WPF4 есть CellStyle для DataGridTemplateColumns: http://msdn.microsoft.com/en-us/library/cc189163.aspx

...