我想知道是否有办法使用动态资源的wpf样式的basedOn属性.例如
这例如抛出一个错误,表明不能使用dynamicnources和BasedOn样式.我想知道有人能做到这一点吗?谢谢
我认为主要原因是密封物体.如果您有Style层次结构:
Style A / \ Style A1 Style A2
这可能不是一个困难的场景.你是指StyleA
利用动态资源,所以每当该资源的变化,Style A1
并且Style A2
应该改变他们的BasedOn
财产.但是,一旦在您的应用程序中使用Style,它就会成为一个密封对象.Style A
变得一成不变.
您可以使用的一种解决方法是:
Style A
需要改变.
创建一个将成为新Style A
资源的新Style对象.
创建一个新版本Style A1
和Style A2
.你需要写一个复制过程,使所有的副本Setters
,Resources
等设置BasedOn
到新版本Style A
.
更新资源集合,以便存在三种新样式.
{DynamicResource StyleA1}
而{DynamicResource StyleA2}
现在应该拿起一个事实,即这些资源的变化(从步骤4),并自动更新任何引用.
请注意,这是一个非常简单的场景.真实世界风格的层次结构可能更复杂,特别是如果它们分布在多个文件中并来自合并的字典.
希望我理解你的问题并帮助我.
我发现,因为你不能使用BasedOn
上DynamicResource
,你可以"转换"的DynamicResource
,以StaticResource
通过合并ResourceDictionary
牵着你的"父"资源添加到当前窗口/用户控件/不管.这样,您现在可以使用引用资源对象(例如Style
)StaticResource
.这样,您就可以使用Datatriggers
上DynamicResource
(通过转换).
例:
... [*Your other resources can be put here*]
因此Datatriggers
适用于在导入中设置样式的按钮ResourceDictionary
.
希望这可以帮助!