小编典典

WPF中的StaticResource和DynamicResource有什么区别?

all

在 WPF 中使用画笔、模板和样式等资源时,可以将它们指定为 StaticResources

<Rectangle Fill="{StaticResource MyBrush}" />

或作为 DynamicResource

<ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}"  />

大多数时候(总是?),只有一个有效,另一个会在运行时抛出异常。但我想知道为什么:

  • 主要区别是什么。像内存或性能影响
  • WPF 中是否有“画笔始终是静态的”和“模板始终是动态的”等规则?

认为 静态与动态之间的选择并不像看起来那样随意……但我看不到这种模式。


阅读 106

收藏
2022-03-13

共1个答案

小编典典

在应用程序实际运行之前加载 XAML
期间,将解析StaticResource并将其分配给属性。它只会被分配一次,并且对资源字典的任何更改都会被忽略。

DynamicResource在加载期间将一个Expression
对象分配给该属性,但直到运行时要求该 Expression 对象提供值时才实际查找该资源。这会延迟查找资源,直到在运行时需要它。一个很好的例子是对稍后在
XAML 中定义的资源的前向引用。另一个例子是直到运行时才存在的资源。如果源资源字典更改,它将更新目标。

2022-03-13