[WPF系列]-DynamicResource与StaticResource的区别
探討:
1、當(dāng)引用資源時,選擇StaticResource還是DynamicResource的考慮因素:
(1)在哪里創(chuàng)建資源?(資源的范圍或?qū)蛹?/strong>)
a. 資源是在一個Page/Canvas/Window中?
b. 在應(yīng)用程序范圍中?
c. 在松散的Xaml中?
d. 在某個特定的Object(比如某個特定的Button)中?
物件級:此時,資源只能套用在這個Object物件,或套用至該物件的子物件。
文件級:如果將資源定義在Window或Page層級的XAML檔中,那么可以套用到這個文件中的所有物件。
應(yīng)用程序級:如果我們將資源定義在App.xaml 中,那么,就可以將資源套用到應(yīng)用程序內(nèi)的任何地方。
字典級:當(dāng)我們把資源封裝成一個資源字典, 定義到一個ResourceDictionary的XAML文件時,就可以在另一個應(yīng)用程序中重復(fù)使用。
(2) 應(yīng)用程序的功能:是否在運行時改變資源?
如果需要改變,則使用DynamicResource。
(3) 每個資源引用類型不同的尋找行為。(需要支持向前引用嗎?)
StaticResources的適用場合:
(1)在資源第一次引用之后無需再修改資源的值。
(2)資源引用不會基于運行時的行為進行重新計算,比如在重新加載Page/Window的時候。
(3)當(dāng)需要設(shè)置的屬性不是DependencyObject或Freezable類型的時候,用StaticResource。
(4)當(dāng)需要將資源編譯到dll中,并打包為程序的一部份,或者希望在各應(yīng)用程序之間共享時,也使用StaticResource。
(5)當(dāng)需要為一個自定義控件創(chuàng)建一個Theme,并Theme中使用資源,就需要使用StaticResource。因為StaticResource的資源查找行為時可預(yù)測的,并且本身包含在Theme中。而對于DynamicResource,即使資源是定義在Theme中,也只能等到運行時確定,導(dǎo)致一些可能意料不到的情況發(fā)生。
(6)當(dāng)需要使用資源設(shè)置大量的依賴屬性(Dependency Property)的時候。
由于依賴屬性具有屬性系統(tǒng)提供的值緩存機制,所以,如果能在程序裝載時設(shè)置依賴屬性的值,這樣,依賴屬性就不需要檢查自己的值并返回最后的有效值了。
Dynamic Resource一般使用在如下場合:
(1)資源的值依賴一些條件,而該條件直到運行時才能確定。
包括系統(tǒng)資源,或是用戶可設(shè)置的資源。比如:可以創(chuàng)建引用系統(tǒng)屬性諸如SystemColors,SystemFonts來設(shè)置值,而這些屬性是動態(tài)的,它們的值又來自于運行環(huán)境和操作系統(tǒng)。
(2)為自定義控件引用或創(chuàng)建Theme Style。
(3)希望在程序運行期間調(diào)整資源字典的內(nèi)容時。
(4)希望資源可以向前引用時(如上面在Canvas中引用innerLgbResource一樣)
(5)資源文件很大,希望在運行時才加載。
(6)要創(chuàng)建的Style的值可能來自于其它值,而這些值又依賴于Theme或用戶的設(shè)置。
(7)當(dāng)引用資源的元素的父元素有可能在運行期改變,這個時候也需要使用動態(tài)資源。因為父元素的改變將導(dǎo)致資源查詢的范圍。
Dynamic resource的限制條件:屬性必須是依賴屬性,或是Freezable的。
資源的查詢方式
Static Resource的查詢
(1)查找使用該資源的元素的Resource字典;
(2)順著邏輯樹向上查找父元素的資源字典,直到根節(jié)點;
(3)查找Application資源;
(4)不支持向前引用,即:不能引用在引用點之后才定義的資源。
Dynamic Resource的查詢
(1)查找使用該資源的元素的Resource字典;
如果元素定義了一個Style 屬性,將查找Style中的資源字典;如果元素定義了一個Template屬性,將查找FrameworkTemplate中的資源字典。
(2)順邏輯樹向上查找父元素的資源字典,直到根節(jié)點;
(3)查找Application資源;
(4)查找當(dāng)前激活狀態(tài)下的Theme資源字典;
(5)查找系統(tǒng)資源。
?
參考
用實例講DynamicResource與StaticResource的區(qū)別
轉(zhuǎn)載于:https://www.cnblogs.com/HQFZ/p/4205830.html
總結(jié)
以上是生活随笔為你收集整理的[WPF系列]-DynamicResource与StaticResource的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MFC】BitBlt详解
- 下一篇: 没有事业的女朋友(一个老总的感言)