我已经阅读此内容有一段时间了,但我似乎找不到可以帮助我的答案,所以我希望我在这里能有更多的运气。
在我的项目中,我有一个库,其中包含许多控件样式。这些样式使用资源作为静态资源。所以“资源树”基本上是这样的:
- 主题.xaml
- SizeResources.xaml
- ColorResources.xaml
- ControlStyles.xaml
- Control1.xaml
- Control2.xaml
Theme.xaml 合并 SizeResources、ColorResources 和 ControlStyles。 ControlStyles 合并特定控件的所有 xaml。
现在,在我的应用程序中,我想应用该主题,因此 OnStartup 我将 Theme.xaml 添加到我的 Application.Current.Resources.MergedDictionaries 中。效果很好,所有 key 都在那里。当我现在尝试使用控件时,出现异常,例如找不到尺寸或颜色资源。具体示例:
我有一个特殊的按钮,其背景颜色在 ColorResources 中定义,我的 ButtonStyle 使用此资源作为静态资源。当我在应用程序项目中使用该按钮时,出现无法找到背景资源的异常。当我在 control1.xaml 中将静态资源更改为动态资源时,它就可以工作了。
有什么想法为什么我不能使用静态资源执行此操作吗?根据我的理解,静态也应该有效。
最佳答案
如果您尝试定义:
<Rectangle Fill="{StaticResource SpecialBackgroundBrush}"/>
代替您的Button
,它可以工作吗?我怀疑会的。假设确实如此,您需要做的是确保 Button
样式本身具有对画笔的静态访问权限。因此,在您的 Button.xaml 中,您需要类似以下内容:
<ResourceDictionary ...>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ColorResources"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="Button">
...
</Style>
</ResourceDictionary>
如果这没有帮助,查看 XAML 示例会很有用。
关于wpf - StaticResource Lookup 不适用于合并字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9360507/