在 WPF 中使用画笔、模板和样式等资源时,可以将它们指定为 StaticResources
<Rectangle Fill="{StaticResource MyBrush}" />
或作为 DynamicResource
<ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}" />
大多数时候(总是?),只有一个有效,另一个会在运行时抛出异常。但我想知道为什么:
我 认为 静态与动态之间的选择并不像看起来那样随意……但我看不到这种模式。
在应用程序实际运行之前加载 XAML 期间,将解析StaticResource并将其分配给属性。它只会被分配一次,并且对资源字典的任何更改都会被忽略。
DynamicResource在加载期间将一个Expression 对象分配给该属性,但直到运行时要求该 Expression 对象提供值时才实际查找该资源。这会延迟查找资源,直到在运行时需要它。一个很好的例子是对稍后在 XAML 中定义的资源的前向引用。另一个例子是直到运行时才存在的资源。如果源资源字典更改,它将更新目标。