WPF StaticResource有效,DynamicResource无效

标签 wpf xaml themes dynamicresource componentresourcekey

我已经尝试了一天,但无济于事,在主题中创建了一堆画笔,然后将它们与自定义控件中的DynamicResource一起使用。我所做的是:

  • 创建包含样式(作品)的主题generic.xaml
  • 添加一个字典以合并到generic.xaml中,以包含在应用程序中使用的画笔(有效)
  • 使画笔具有ComponentResourceKey键(有效)
  • 使控件使用画笔作为静态资源(有效)
  • 使控件使用画笔作为动态资源(不做,资源跟踪源说得太多:System.Windows.ResourceDictionary警告:9:找不到资源;)
  • 在App.Resource中添加具有相同键的画笔(与动态资源一起使用,它可以更改颜色,不能像预期的那样与静态资源一起使用)

  • 所以我的问题是我找不到在主题中定义默认值的任何方法,因此我可以在应用程序中以编程方式更改它们。 StaticResource如何找到笔刷,而DynamicResource如何找不到笔刷!

    我必须补充一点,我已经创建了一个静态类,将组件资源键作为属性,然后在xaml中用作{x:Static UI:ResourceScheme.ControlBackgroundKey}。我的问题似乎与此相似:ComponentResourceKey as DynamicResource problem,仅当我将静态属性键替换为组件资源键的XAML标记时,它仍然不起作用。

    有人可以帮我吗? :(

    最佳答案

    这是区别

    在加载时会加载StaticResource,这意味着必须在使用之前按词法定义您正在使用的资源 key 。

    因此,在自定义控件的情况下,静态资源必须仅在相同的generic.xaml文件中的控件定义上方定义。因此,如果将画笔放在不同的xaml中,则在静态资源的情况下肯定无法使用。

    这是因为,除非在同一文件中包含xaml类型的其他资源以某种导入的形式包含在同一文件中,否则您将无法在该文件中使用静态资源。它只是意味着文件/组件/控件的实际xaml应该包含您所使用的静态资源的实际引用。

    现在,我对为什么DynamicResource不起作用感到怀疑,这是因为DynamicResource可能只会在应用程序的(使用控件的地方)ResourceDictionary中查找,而不在generic.xaml中查找。

    我不确定100%,但是我觉得如果您定义自定义控件,并且使用DynamicResource,则您的资源必须位于应用程序的资源字典中或控件资源字典的父容器中,但不能位于generic.xaml中。

    因为DynamicResource只会在控件的运行时逻辑树中查找键,这就是为什么除非在Application.Resources中显式添加了generic.xaml,否则它可能找不到generic.xaml中的资源的原因。

    摘要:
    在编译时,StaticResource必须在词法上可用之前在同一文件中,资源在Application.Resources词典中可用,它仍然可以在逻辑树中找到,但在编译时只能在相同的dll或相同的generic.xaml中找到。

    必须在运行时在Application.Resources和控件的逻辑树中搜索DynamicResource。

    有关更多引用,请检查Resources Overview

    关于WPF StaticResource有效,DynamicResource无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3537107/

    相关文章:

    wpf - 从外部文件或程序集中加载 WPF 样式或其他静态资源

    xaml - WP7 项目中的主题感知 XAML 资源

    powershell - 为什么 Shopify 在使用 Powershell 压缩时不接受我的主题的 zip 文件

    c# - 如何在 "Visibility"类别而不是 "Other"下声明 DependencyProperty ?

    wpf - 我如何制作一个在单击鼠标时闪烁/淡出的控件? ( window )

    c# - 如何将属性名称转换为 WPF 中的框架元素?

    css - 使用 SALON 主题的 Logo 未出现在 Wordpress 中

    c# - 如何使用存储在 ObservableCollection 中的值向数据库添加新行?

    c# - DispatcherTimer 在更新 UI 时每分钟变慢

    magento - 是否可以使用 Twitter Bootstrap 创建 Magento 网站?