我已经找到了这个问题和其他风格问题的解决方案。以telerik文档(f.e。
https://docs.telerik.com/devtools/wpf/controls/radgridview/styles-and-templates/styling-a-row
)有一些文档中未提及的问题。
<Style TargetType="telerik:GridViewRow">
<Setter Property="Background" Value="Red"/>
<Setter Property="Foreground" Value="White"/>
</Style>
这是实现风格最简单的例子之一。我的情况是:
<Style TargetType="telerik:GridViewCell"
x:Key="IloscNormalStyle"
BasedOn="{StaticResource GridViewCellStyle}">
<Setter Property="Background"
Value="#c3d8c7" />
<Setter Property="Foreground"
Value="Black" />
</Style>
而且效果很好。最大的问题是,它完全忽略了项目的已实现主题及其所有行为,例如,选择行为、回车键、边框等。为了告诉样式不要忽略已实现主题,我需要在样式中插入以下代码:
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=telerik:GridViewRow}}"
Value="True">
<Setter Property="Background"
Value="{Binding Background}" />
</DataTrigger>
</Style.Triggers>
这最终使我的风格达到了预期的效果。完整样式代码:
<Style TargetType="telerik:GridViewCell"
x:Key="IloscNormalStyle"
BasedOn="{StaticResource GridViewCellStyle}">
<Setter Property="Background"
Value="#c3d8c7" />
<Setter Property="Foreground"
Value="Black" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=telerik:GridViewRow}}"
Value="True">
<Setter Property="Background"
Value="{Binding Background}" />
</DataTrigger>
</Style.Triggers>
</Style>
我认为这是telerik(甚至WPF)的一个主要问题,但这两行代码解决了自定义单元格/行样式的大多数问题。