Wpf 从ResourceDictionary重写单个属性设置器
我在一个名为MyStyles.xaml的文件中定义了一个样式: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
<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(我指的是上面的第一个建议),所以这种方式必须做到。