Ant*_*ard 9 wpf merge dictionary staticresource
我目前正在研究可以动态应用于我的应用程序的样式和模板字典.在这个"新想要的"动态行为之前,我有几个资源字典,每个样式控件一个,我在App.xaml中合并:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ColorsDictionary.xaml"/>
<ResourceDictionary Source="ControlsTemplatesDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
现在,我希望我的应用程序被设置样式,所以我决定将我以前的所有资源合并到一个名为"MyFirstTemplates"的新资源中,并且只将这个字典添加到App.xaml中.
新词典"MyFirstTemplates.xaml":
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">"
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ColorsDictionary.xaml"/>
<ResourceDictionary Source="ControlsTemplatesDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
新的App.xaml:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="MyFirstTemplates.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type Window}"/>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
注意:Window的默认样式是更正WPF 4的错误,请参阅将合并字典添加到合并字典
现在我已经做了这个改变,我不能再使用"ColorsDictionary.xaml"中的颜色资源作为"ControlsTemplateDictionary.xaml"中的StaticResource了.如果我改回到在app.xaml中合并这些文件,一切正常.为了使它工作,我必须为DynamicResource更改这些StaticResource.你知道为什么这不再起作用吗?
谢谢 :-)
通过将字典移出App.xaml,在加载MyFirstTemplates.xaml期间,每个字典中的资源不在另一个字典中.您的原始设置首先加载了ColorsDictionary,然后在加载时通过App资源提供给ControlsTemplatesDictionary.在新的设置中,为了使颜色资源在App资源中可用,它需要通过MyFirstTemplates加载,这反过来又需要加载两个字典,这反过来需要访问颜色资源...所以它的类型无限循环的引用,无法静态解析.DynamicResource可以等到所有内容都加载完毕,然后无问题地访问颜色.
要修复使用Dynamic或将ColorsDictionary直接合并到ControlsTemplatesDictionary中.
| 归档时间: |
|
| 查看次数: |
4162 次 |
| 最近记录: |