Sid*_*ite 9 wpf xaml themes componentresourcekey dynamicresource
我一直在尝试一天,无济于事,在主题中创建一堆画笔,然后在自定义控件中使用DynamicResource.我做的是这样的:
所以我的问题是我找不到任何方法来定义主题中的默认值,以便我可以在应用程序中以编程方式更改它们.StaticResource怎么能找到画笔和DynamicResource呢?!
我必须补充一点,我已经创建了一个静态类,将组件资源键作为属性保存在xaml中,例如{x:Static UI:ResourceScheme.ControlBackgroundKey}.我的问题似乎与此类似:ComponentResourceKey仅作为DynamicResource问题,如果我将静态属性键替换为组件资源键的XAML标记,它仍然不起作用.
有人可以帮帮我吗?:(
区别就在这里
StaticResource 在加载时加载,这意味着您正在使用的资源键必须在使用前进行词法定义。
因此,自定义控件中的静态资源必须仅在同一 generic.xaml 文件中的控件定义上方定义。所以如果你把你的画笔放在不同的 xaml 中,它肯定不会在静态资源的情况下工作。
这就是原因,除非在同一文件中编译时以某种导入的形式包含 xaml 类型的其他资源,否则您不能在文件中使用静态资源。它只是意味着文件/组件/控件的实际 xaml 应该包含您使用的静态资源的实际引用。
现在我怀疑为什么 DynamicResource 不起作用,那是因为 DynamicResource 可能只会查看应用程序的(使用控件的地方)ResourceDictionary 而不是 generic.xaml。
我不是 100% 确定,但我觉得如果你定义一个自定义控件并且如果你使用 DynamicResource 那么你的资源必须在应用程序的资源字典或你的控件资源字典的父容器中,但它不能在 generic.xaml 中.
因为 DynamicResource 只会在控制运行时的逻辑树中查找键,这就是为什么它可能找不到 generic.xaml 中的资源,除非在 Application.Resources 中显式添加 generic.xaml。
总结: StaticResource在编译时在同一个文件中必须在词法上可用,资源将在Application.Resources字典中可用,它仍然可以在逻辑树中找到但在编译时只能在同一个dll或同一个generic.xaml中。
DynamicResource 必须在运行时在 Application.Resources 和控件的逻辑树中搜索。
如需更多参考,请查看资源概览
最后修好了.看来,在另一个程序集中使用组件资源键的类型会导致整个问题.让我总结一下:
最终结果是:
解决方案似乎是移动控件库中的资源类.
由于我仍然不知道为什么会发生这种情况,这个问题仍然存在,即使稍有改变:为什么它在第一种情况下不起作用?