我已经阅读了一段时间了,但我似乎无法找到可以帮助我的答案,所以我希望我能在这里获得更多运气。
在我的项目中,我有一个包含很多控件样式的库。这些样式使用资源作为静态资源。所以“资源树”基本上是这样的:
Theme.xaml合并SizeResources,ColorResources和ControlStyles。 ControlStyles合并特定控件的所有xamls。
现在在我的应用程序中我想应用该主题,因此OnStartup我将Theme.xaml添加到我的Application.Current.Resources.MergedDictionaries。哪个工作正常,所有键都在那里。当我现在尝试使用控件时,我得到一个异常,例如无法找到大小或颜色资源。具体例子:
我有一个特殊按钮,其背景颜色在ColorResources中定义,我的ButtonStyle使用此资源作为静态资源。当我在我的应用程序项目中使用该Button时,我得到一个异常,即无法找到Background资源。当我在control1.xaml中将静态资源更改为动态资源时,它就可以工作。
任何想法为什么我不能用静态资源做这个?根据我的理解,静态也应该起作用。
答案 0 :(得分:2)
如果您尝试定义:
<Rectangle Fill="{StaticResource SpecialBackgroundBrush}"/>
代替您的Button
,它有效吗?我怀疑它会。假设确实如此,您需要做的是确保Button
样式本身具有对画笔的静态访问。因此,在 Button.xaml 中,您需要以下内容:
<ResourceDictionary ...>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ColorResources"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="Button">
...
</Style>
</ResourceDictionary>
如果这样做没有用,那么查看XAML的示例会很有用。
答案 1 :(得分:0)
即使是动态资源也存在未在相邻合并词典中找到的缺点。但真正的问题在于剥皮。如果您只想更改颜色,而不是控制模板 - 这又取决于那些颜色,那该怎么办?
可以将颜色和模板分成两个XAML文件,但是如果你有几个Color文件(每个皮肤一个),模板文件中应包含哪个“Color”XAML文件?