wpf - StaticResource Lookup 不适用于合并字典

标签 wpf resources static mergeddictionaries

我已经阅读此内容有一段时间了,但我似乎找不到可以帮助我的答案,所以我希望我在这里能有更多的运气。

在我的项目中,我有一个库,其中包含许多控件样式。这些样式使用资源作为静态资源。所以“资源树”基本上是这样的:

  • 主题.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/

相关文章:

php - 自定义 Composer 自动加载器

android - 如何从图标包加载图标

android - 编译我的android项目时resources.ap_不存在

c - 不了解C中static int的功能

c# - 如何填充使用 PropertyGrid 的 CollectionEditor(扩展 WPF 工具包)时出现的 CollectionControlDialog?

mysql - fullcalendar调度程序mysql资源json

python - 如何使用 python 在单个 session 中执行多个命令的子进程中使用变量

c# - 是否可以使用触发器 setter 来更改 ViewModel 属性?

wpf - 如何在自定义控件中创建可绑定(bind)命令?

c# - 为什么我的 comboBox 的 SelectedValuePath 属性行为不正常?