2012-11-29 56 views
1

我在App.xaml中定义的样式如下:如何覆盖XAML中的Datagrid单元格样式?

<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

回答

4

通过设置在列CellStyle财产,这种风格将用于该列的每一个细胞,系统将不再在乎你所定义的风格作为资源。

要应用这两种样式,您必须以app.xaml中的资源中的一种为基础,使用cellstyle。

你做到这一点通过设置这样的风格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> 
+0

我一直在寻找答案..谢谢:) – sony