如果我多次使用MergedDictionaries定义样式,它在运行时不起作用,但在VS2010的WPF Designer中它可以工作。如果在运行时使用代码加载MergedDictionaries,它也可以工作。
为什么会这样?这只是我的问题还是?以及如何解决?
I am using WPF4 and loading themes/styles from an assembly at application level.
无法正常工作
<!--Application.xaml-->
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Lib;component/Themes/Theme.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
<!--Theme.xaml-->
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Theme/Shared.xaml" />
<ResourceDictionary Source="Theme/Button.xaml" />
</ResourceDictionary.MergedDictionaries>
的工作 的
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Lib;component/Themes/Theme/Shared.xaml" />
<ResourceDictionary Source="pack://application:,,,/Lib;component/Themes/Theme/Button.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
答案 0 :(得分:9)
查看this question的答案。我有一种感觉,你有同样的问题
这是一个优化错误,请参阅this link
关于创建每个对象 XAML,如果存在默认样式 (即具有类型的键的样式) 风格应该适用。尽你所能 想象有几个表现 优化(隐含) 查找尽可能轻的重量。一 他们是我们不看里面 资源字典除非它们是 标记为“包含默认值 样式”。有一个错误:如果你所有的 默认样式嵌套在合并中 字典深入三层(或 更深层次的顶级词典没有 得到标记,以便搜索跳过它。 解决方法是设置默认值 风格的东西,任何东西,在 根词典。
因此,在根字典中添加虚拟样式可以解决此问题。实施例
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Lib;component/Themes/Theme.xaml" />
</ResourceDictionary.MergedDictionaries>
<!-- Dummy Style, anything you won't use goes -->
<Style TargetType="{x:Type Rectangle}" />
</ResourceDictionary>
</Application.Resources>