如何在XAML中覆盖Datagrid单元格样式?

时间:2012-11-29 11:47:24

标签: wpf

我在app.xaml中定义了一个样式,如下所示:

<Style TargetType="DataGridCell">
        <Setter Property= "BorderThickness" Value="1"/>            
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="DataGridCell">
                            <Grid Height="18">
                                <Border BorderBrush="Black" BorderThickness=".2" >
                                    <Border x:Name="border" Background="#992288ff" BorderBrush="Black" BorderThickness=".2">
                                      ......
                      ......
                  ......
                                    </Border>
                                </Border>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
     </Style.Triggers>

在我的表单中,我为一个单元格定义了一种样式。代码如下:

 <DataGridTextColumn Width="*" Header="Status" Binding="{Binding Status, Mode=TwoWay}" IsReadOnly="True" >
                    <DataGridTextColumn.CellStyle>
                        <Style TargetType="DataGridCell">
                            <Setter Property="Foreground">
                                <Setter.Value>
                                    <Binding Converter="{StaticResource FGColorKey}"/>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGridTextColumn.CellStyle>
                </DataGridTextColumn>

这里我只定义前景样式。但我在app.xaml中为单元格模板定义的样式不适用于此单元格。请看下面的图片:

enter image description here

1 个答案:

答案 0 :(得分:4)

通过在列上设置CellStyle属性,该样式将用于该列中的每个单元格,系统将不再关心您已定义为资源的样式。

要应用这两种样式,您必须将单元格样式中的样式基于app.xaml中资源中的样式。

您可以通过在样式上设置BasedOn属性来执行此操作:

<DataGridTextColumn.CellStyle>
    <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
        <Setter Property="Foreground">
            <Setter.Value>
                <Binding Converter="{StaticResource FGColorKey}"/>
            </Setter.Value>
        </Setter>
    </Style>
</DataGridTextColumn.CellStyle>