当前位置:  开发笔记 > 编程语言 > 正文

在DynamicResources上使用BasedOn Style属性

如何解决《在DynamicResources上使用BasedOnStyle属性》经验,为你挑选了2个好方法。

我想知道是否有办法使用动态资源的wpf样式的basedOn属性.例如


这例如抛出一个错误,表明不能使用dynamicnources和BasedOn样式.我想知道有人能做到这一点吗?谢谢



1> Szymon Rozga..:

我认为主要原因是密封物体.如果您有Style层次结构:

       Style A
      /       \
  Style A1  Style A2

这可能不是一个困难的场景.你是指StyleA利用动态资源,所以每当该资源的变化,Style A1并且Style A2应该改变他们的BasedOn财产.但是,一旦在您的应用程序中使用Style,它就会成为一个密封对象.Style A变得一成不变.

您可以使用的一种解决方法是:

    Style A 需要改变.

    创建一个将成为新Style A资源的新Style对象.

    创建一个新版本Style A1Style A2.你需要写一个复制过程,使所有的副本Setters,Resources等设置BasedOn到新版本Style A.

    更新资源集合,以便存在三种新样式.

{DynamicResource StyleA1}{DynamicResource StyleA2}现在应该拿起一个事实,即这些资源的变化(从步骤4),并自动更新任何引用.

请注意,这是一个非常简单的场景.真实世界风格的层次结构可能更复杂,特别是如果它们分布在多个文件中并来自合并的字典.

希望我理解你的问题并帮助我.


这个场景怎么样 - 一个不同的(Ux)团队创建基本样式......开发人员除了基本样式之外还想设置几个属性.理想情况下,这是DevStyle BasedOn"DynamicResource UxStyle"可能有帮助的场景.如果这不可能,在将2个样式应用于控件之前合并2个样式的替代方案是什么?

2> 小智..:

我发现,因为你不能使用BasedOnDynamicResource,你可以"转换"的DynamicResource,以StaticResource通过合并ResourceDictionary牵着你的"父"资源添加到当前窗口/用户控件/不管.这样,您现在可以使用引用资源对象(例如Style)StaticResource.这样,您就可以使用DatatriggersDynamicResource(通过转换).

例:


    
        
            
        
        [*Your other resources can be put here*]
    


...


因此Datatriggers适用于在导入中设置样式的按钮ResourceDictionary.

希望这可以帮助!

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有