Dot-Net
WPF中的StaticResource和DynamicResource有什麼區別?
在 WPF 中使用畫筆、模板和样式等資源時,可以將它們指定為 StaticResources
<Rectangle Fill="{StaticResource MyBrush}" />或作為 DynamicResource
<ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}" />大多數時候(總是?),只有一個有效,另一個會在執行時拋出異常。但我想知道為什麼:
- 主要區別是什麼。像記憶體或性能影響
- WPF 中是否有“畫筆始終是靜態的”和“模板始終是動態的”等規則?
我認為靜態與動態之間的選擇並不像看起來那樣隨意……但我看不到這種模式。
在應用程序實際執行之前載入 XAML 期間,將解析StaticResource並將其分配給屬性。它只會被分配一次,並且對資源字典的任何更改都會被忽略。
DynamicResource在載入期間將一個Expression 對象分配給該屬性,但直到執行時要求該 Expression 對象提供值時才實際查找該資源。這會延遲查找資源,直到在執行時需要它。一個很好的例子是對稍後在 XAML 中定義的資源的前向引用。另一個例子是直到執行時才存在的資源。如果源資源字典更改,它將更新目標。