0

我正在尝试为 DataGrid 和 TextBlocks 隐式应用样式。

对于 TextBlock 的前景,我需要白色

对于 DataGrid 的行,我需要黑色

除此之外,对于 DataGrid 的标题列,我再次需要White 。

在此处输入图像描述

当我在 MainPage 上全局应用隐式样式时

<UserControl>
 <UserControl.Resorces>
    <Style targetType="TextBlock">
        <Setter Property="Foreground" Value="White"/>
    </Style>
 </UserControl.Resorces>
</UserControl>

制作TextBlock的Foreground White操作就完成了!但除此之外,DataGrid 中的所有元素(我认为默认内容元素是文本块)都变成了白色。

正如你猜想的那样,它看起来不太好 White on white :) 那么我怎样才能特别指定 DataGrid 的元素 Foreground 为黑色呢?

我可以通过使用下面显示的相同技术来做到这一点,但这对于每个 DataGrid 来说都是一项昂贵的操作。作为一个骗局,我希望 DataGrid 的 HeaderColumns 再次变白。此操作使它们全部变黑。

有没有像我们在 css 样式中那样的明确方式?

这是我试图通过控制模板实现这一目标的方法。但没有机会因为是DataGrid 的ContentControl 是动态的。

<DataGrid>
<DataGrid.Resources>
    <Style targetType="TextBlock">
        <Setter Property="Foreground" Value="Black"/>
    </Style>
<DataGrid.Resources>

事实上,我们使用 Telerik 的 RadGridView,但我给出了一个 sdk 的 DataGrid 示例,以使问题更加全球化。

<Style TargetType="sdk:DataGrid">
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="RowDetailsTemplate" Value="{StaticResource DataTemplate1}"/>
    <Setter Property="Template" Value="{StaticResource ControlTemplate1}"/>
</Style>

<ControlTemplate x:Key="ControlTemplate1" TargetType="sdk:DataGrid">
    <Grid/>
</ControlTemplate>

<DataTemplate x:Key="DataTemplate1">
    <Grid/>
</DataTemplate>

提前致谢!

4

1 回答 1

1

如果是我,我会拉出完整的控制模板并相应地设置它们的样式,而不是尝试仅进行临时设置器更改以覆盖原始模板的位。在 Expression Blend 中右键单击,选择“编辑模板-> 编辑副本”并为您的行等拆分模板,然后使用 StaticResource 隐式应用这些模板。

于 2012-12-21T15:55:19.280 回答