DynamicResource 不工作,但 StaticResource 可以吗?

Posted

技术标签:

【中文标题】DynamicResource 不工作,但 StaticResource 可以吗?【英文标题】:DynamicResource not working, but StaticResource does? 【发布时间】:2010-12-24 14:06:42 【问题描述】:

这是场景:

1) 打开 Visual Studio 2008,新建项目...

2) 选择WPF自定义控件库作为项目类型

3) 打开位于 Themes 文件夹中的 Generic.xaml 资源字典

4) 添加一个简单的画笔如:

5) 更改嵌套 Borer 控件的背景属性

Background="TemplateBinding 背景"

Background="DynamicResource BackgroundBrush"

现在当你在任何项目中编译和使用这个控件时,背景不会是黄色的。但是,如果您将背景属性更改为这样的静态资源

Background="StaticResource BackgroundBrush"

...它会工作的。为什么是这样?为什么 StaticResource 有效,DynamicResource 无效???

【问题讨论】:

这里有同样的问题。 Expression Blend 默认创建 DynamicResource,这是由于程序运行不正确造成的。这很奇怪!发布问题后,您有什么发现吗? 【参考方案1】:

如果您在 Xaml 文件中对画笔进行硬编码,那对我来说听起来很静态。

DynamicResource 的 MSDN 条目说这是为了当您希望使用在运行时解析资源的名称(即名称存储在另一个资源中)时,您在编译时知道名称。

听起来很像 C 中的指针与指向指针的指针。

【讨论】:

我不明白你的回答。没有硬编码,这是定义资源的方式。这里没有关于指针的内容。

以上是关于DynamicResource 不工作,但 StaticResource 可以吗?的主要内容,如果未能解决你的问题,请参考以下文章

2022-04-20 WPF面试题 WPF中StaticResource和DynamicResource之间有什么区别?

在 ResourceDictionary 中交换 DynamicResource

DynamicResource 和 StaticResource

StaticResource和DynamicResource

wpf中staticresource和dynamicresource有啥区别

DynamicResource 颜色不适用于边框上的 BorderBrush - 错误?