Dot-Net

WPF中的StaticResource和DynamicResource有什麼區別?

  • October 14, 2008

在 WPF 中使用畫筆、模板和样式等資源時,可以將它們指定為 StaticResources

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

或作為 DynamicResource

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

大多數時候(總是?),只有一個有效,另一個會在執行時拋出異常。但我想知道為什麼:

  • 主要區別是什麼。像記憶體或性能影響
  • WPF 中是否有“畫筆始終是靜態的”和“模板始終是動態的”等規則?

認為靜態與動態之間的選擇並不像看起來那樣隨意……但我看不到這種模式。

在應用程序實際執行之前載入 XAML 期間,將解析StaticResource並將其分配給屬性。它只會被分配一次,並且對資源字典的任何更改都會被忽略。

DynamicResource在載入期間將一個Expression 對象分配給該屬性,但直到執行時要求該 Expression 對象提供值時才實際查找該資源。這會延遲查找資源,直到在執行時需要它。一個很好的例子是對稍後在 XAML 中定義的資源的前向引用。另一個例子是直到執行時才存在的資源。如果源資源字典更改,它將更新目標。

引用自:https://stackoverflow.com/questions/200839