从ResourceDictionary覆盖单个属性setter

时间:2012-08-28 20:41:02

标签: wpf

我在名为MyStyles.xaml的文件中定义了一种样式:

<Style TargetType="{x:Type igDP:XamDataGrid}">
    <Setter Property="FontSize" Value="10" />
    <Setter Property="FontFamily" Value="Arial" />
    <EventSetter Event="CellUpdating" Handler="grid_CellUpdating"/>
</Style>

在我的一个视图中,我定义了一个XamDataGrid:

<igDP:XamDataGrid>
    <igDP:XamDataGrid.Resources>
      <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="/MyProject.TheViews;component/Views/MyStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <Style TargetType="{x:Type igDP:XamDataGrid}" BasedOn="{StaticResource {x:Type igDP:XamDataGrid}}">
          <Setter Property="FontSize" Value="70"/>
        </Style>
      </ResourceDictionary>
     </igDP:XamDataGrid.Resources>

基本上,我想在MyStyles.xaml中保留XamDatagrid样式中定义的所有内容,但字体大小除外,我希望将其设置为70.

我似乎无法让它发挥作用。使用上面的内容,字体设置为70但我丢失了MyStyles中定义的其他设置(例如事件处理和字体系列)。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

(从上面的评论中提取答案。)

为了覆盖这种风格,我建议如下:

MyStyles.xaml中定义2个样式:一个包含样式的命名样式,以及一个基于命名样式的未命名样式(这将是默认样式)

<Style x:Key="XamDataGridDefaultStyle" TargetType="{x:Type igDP:XamDataGrid}">
    <Setter Property="FontSize" Value="10" />
    <Setter Property="FontFamily" Value="Arial" />
    <EventSetter Event="CellUpdating" Handler="grid_CellUpdating"/>
</Style>

<Style TargetType="{x:Type igDP:XamDataGrid}"
       BasedOn="{StaticResource XamDataGridDefaultStyle}"/>

这将为所有视图定义所需的默认样式。

对于需要自定义的视图的资源,请定义以下覆盖:

<Style TargetType="{x:Type igDP:XamDataGrid}"
       BasedOn="{StaticResource XamDataGridDefaultStyle}">
    <Setter Property="FontSize" Value="70"/>
</Style>

您可能需要在MyStyles.xaml的自定义视图资源中将StaticResource作为合并字典引用。