基于不同XAML的样式继承

2024-01-13

如何将样式中的 BasedOn 标记指定为在其他文件中定义的样式。

Example,

Dictionary1.xaml 定义

   <Style x:Key="basicStyle" TargetType="TextBlock" >
       <Setter Property="FontSize" Value="24"></Setter>
       <Setter Property="Foreground" Value="DarkGray"></Setter>
       <Setter Property="FontWeight" Value="Bold"></Setter>
    </Style>

在 Dictionary2.xaml 中我需要类似的东西

    <Style x:Key="headerStyle" TargetType="TextBlock" >
       <Setter Property="FontSize" Value="46"></Setter>
       <Setter Property="Foreground" Value="DarkGray"></Setter>
       <Setter Property="FontWeight" Value="Bold"></Setter>
    </Style>

如何实现这一目标?


最简单的方法:

In Dictionary2.xaml定义 MergedDictionaries (在打开之后ResourceDictionary tag):

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Path/to/Dictionary1.xaml" />
</ResourceDictionary.MergedDictionaries>

And then

<Style x:Key="headerStyle" TargetType="TextBlock" BasedOn="{StaticResource basicStyle}" >
    .....
</Style>

这将解决问题,但与所有简单的解决方案一样,有一个问题:每次合并字典时,您都会有效地创建合并字典的副本。它是递归的 - 如果您有 Dict3.xaml 和 Dict4.xaml 都加载 Dictionary2.xaml,您将创建三个 Dictionary1.xaml 实例。通过复杂的依赖结构,您可以在应用程序启动时在内存中拥有 19,000 多个字典对象,并且内存占用量从 180MB 到 1200MB (TrueStory™:()。

解决方案是一个共享资源字典 http://www.wpftutorial.net/MergedDictionaryPerformance.html。本教程中的实现应该被视为一个起点,并且可能需要一定程度的调整 - 根据使用场景。谷歌“wpf SharedResourceDictionary”以获取一些问题和解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于不同XAML的样式继承 的相关文章

随机推荐