Wpf 从ResourceDictionary重写单个属性设置器

Wpf 从ResourceDictionary重写单个属性设置器,wpf,Wpf,我在一个名为MyStyles.xaml的文件中定义了一个样式: <Style TargetType="{x:Type igDP:XamDataGrid}"> <Setter Property="FontSize" Value="10" /> <Setter Property="FontFamily" Value="Arial" /> <EventSetter Event="CellUpdating" Handler="grid_C

我在一个名为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中定义的其他设置(例如事件处理和字体系列)

我做错了什么?

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

对于替代样式,我建议如下:

MyStyles.xaml
中定义两种样式:一种是包含样式的命名样式,另一种是仅基于命名样式的未命名样式(这将是默认样式)

<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
工作。

作为一种解决方法,您可以尝试以下操作:在MyStyles.xaml:
;在视图中:
BasedOn=“{StaticResource lalalala}”>…
如果您已经在
XamDataGrid
中,为什么不直接对
XamDataGrid
本身使用
FontSize=“70”
?它将覆盖样式中的设置。如果不采纳Vlad的任何建议,我认为没有任何方法可以做到这一点,基于类型本身,它将返回控件的默认样式。@Vlad:对样式使用键时,它会按预期工作。但是,在这个视图(和其他视图)中,有多个网格,每个网格都使用MyStyles.xaml。如果向特定样式添加关键点,其他轴网不会自动拾取它。我试图做的是以某种方式为单个视图(例如在UserControl.Resources)中设置一个新样式,其中该视图中的所有网格都继承MyStyles的样式并覆盖字体大小。这样,如果我需要再次更改字体大小,我只需要在一个地方进行更改。嗯,我明白了。但是看一看,MyStyles中定义了一个默认样式,基于LALALA(我指的是上面的第一个建议),所以这种方式必须做到。