为DataGrid元素提供特定样式(隐式)

时间:2012-12-21 09:42:10

标签: xaml silverlight-4.0 silverlight-5.0

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

对于TextBlock的ForeGround,我需要白色颜色。

对于DataGrid的行,我需要黑色颜色。

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

enter image description here

当我通过

全局在MainPage上应用隐式样式时
<UserControl>
 <UserControl.Resorces>
    <Style targetType="TextBlock">
        <Setter Property="Foreground" Value="White"/>
    </Style>
 </UserControl.Resorces>
</UserControl>

完成TextBlock的前景白色操作!但除此之外的所有元素 在DataGrid中(我认为默认内容元素是文本块)转为白色。

它看起来并不好白色白色,你猜:) 那么我怎样才能特别指定DataGrid的元素前景为黑色?

我可以使用下面显示的相同技术来实现,但这对每个DataGrid来说都是一项昂贵的操作。作为一个骗子我想再次让DataGrid的HeaderColumns变白。这个操作使它们全黑。

我们在css样式中有明确的方法吗?

以下是我尝试通过Control模板实现此目标的内容。但由于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>

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果是我,我会提取完整的控件模板并相应地设置它们,而不是试图只做adhoc setter更改来覆盖原始模板的位。在Expression Blend中右键单击,选择“编辑模板 - &gt;编辑副本”并打开行等的模板,然后使用StaticResource隐式应用这些模板。