WPF中使用資源
這節講一下如何在WPF中使用資源。
01
瞭解資源
在程式設計中,一個變數,一段程式碼,一張圖片,一段視訊或者音訊,這種可以拿來為我所用的東西就可以稱之為資源,一個讓人眼前一亮的程式,可能會使用到許許多多的資源。在WPF中,除了常用的根據路徑引用資原始檔,還為我們提供了管理資源資料的“物件級”資源,以及Resources.resx檔案,前者通過一個型別為ResouceDictionary的鍵值對物件來管理頁面中定義的資源,後者則是一個資源表,可以供我們全域性使用(當前並不是前者不能讓我們全域性使用,我們在App.xaml中定義的資源是可以被全域性使用的)。
02
"物件級"資源
我們可以在XAML頁面定義一些資源供我們使用,請先看如下程式碼:
在Window.Resources標籤內的ResouceDictionary中可以定義資源,通過key屬性指定資源的標識。此處我定義了key為btn_bgc字串資源,該資源被Grid中的Button.Content屬性使用,執行效果如下:
在Xaml中,我們可以使用標記擴充套件中的StaticResource和DynamicResource指令引用資源,該兩者的區別是,使用StaticResource,會在程式啟動時讀取一次資源資料,後續如果資源資料變動,引用者是不會知道的;而DynamicResource則是會多次讀取,動態更新。
除了在Xaml中使用資源,我們也可以在程式碼中通過Resoure物件獲取,請看如下程式碼:
從後臺程式碼中,我們可以使用FindResource方法或訪問Resources物件通過索引器的方式獲取,但兩者還是有區別的,FindResource方法的查詢面很廣,在App.Xaml中定義的資源,也會被找到,而Resources物件則是隻會找本頁面定義的資源。
03
Resources.resx檔案
在專案的Properties下展開可以找到這個檔案:
雙擊開啟後,是個列表,我們可以看到是個表格介面:
左上角可以指定資源是string還是其它:
預設情況下,該檔案的訪問級別(Access Modifier)是Internal,也就是在程式碼中可以訪問,一般來說,應該改為Pubilc,這樣在Xaml中也可以訪問。
在程式碼中獲取該資源如下:
在Xaml中獲取該資源如下:
在.NET 5版本中,預設去掉了Properties這個資料夾,但如果需要的話我們依然可以通過手動為專案新增Resources.resx檔案。