WPF學習之路 WPF Resources

2021-04-18 22:11:12 字數 3864 閱讀 3990

一、

wpf資源的由來

假定你正在為乙個窗體或乙個對話方塊寫一些xaml**,你想為一些控制項設定兩種不同大小的字型。一些控制項使用大字型,一些控制項使用小字型。你知道哪些控制項該設定哪些字型大小,但是還不十分確信實際的字型大小是多少,也許你首先想做試驗再確定最終的字型大小。

最簡單的辦法是在xaml裡面插入fontsize的值。例如:

fontsize = 「14pt」

如果隨後改變想法,讓一些字型變大一點或變小一點,你就只能通過查詢替換,儘管查詢替換能夠起到一些作用,但作為乙個程式設計師,你知道這不是乙個好的方案。假定你要處理乙個複雜的漸變畫筆,而不是乙個簡單的字型大小問題。你也許可以在整個程式中通過拷貝和貼上來實現它,但是如果你需要修改畫筆設定,你就只能乙個乙個改了。

如果在c#中遇到這個問題,你不需要複製漸變畫筆和硬編碼字型大小尺寸。你可以為這些物件定義變數,為了驗證你的想法並提高效率,你能在窗體類中定義一些常量。

const double fontsizelarge = 14 / 0.75;

const double fontsize**all = 11 / 0.75;

也能定義靜態唯讀值:

static readonly double fontsizelarge = 14 / 0.75;

static readonly double fontsize**all = 11 / 0.75;

不同的是常量在編譯時被確定並在使用時被替換。而靜態常量在執行時才被確定。

在上面的程式中,這種技術同樣適用在xaml裡。你能在xaml裡面通過定義他們作為資源來重用這些物件。因此產生了wpf resources.

二、在

xaml

中使用資源

資源被儲存在resourcedictionary類中,有三個非常基本的類frameworkelement

屬性來分配唯一鍵。通常,該鍵是字串;

下面是在xaml中定義資源的xaml**。

這個資源能被使用在所有的stackpanel和所有的stackpanel子元素。

這下面是定義字型大小資源的xaml**。

在資源部分包含了兩個double物件。在資源字典中,關鍵字必須唯一。

當xaml 引導程式處理 button

的 fontsize 屬性的值 時,資源查詢邏輯首先在資源字典中查詢 button

元素。如果 button

沒有資源鍵 fontsizelarge的定義,查詢邏輯接下來將檢查 button

的父元素,即

stackpanel

。因此,在

stackpanel

根元素中定義某個資源時,

stackpanel

的邏輯樹中的所有元素都可以訪問該資源,並且您可以重用同一資源,以便對接受該資源所表示的 type

的任何屬性值進行設定。

三、資源類別

資源分靜態資源和動態資源。

staticresource

和dynamicresource

staticresource

:通過在所有可用的資源字典中查詢鍵的值來處理該鍵。在載入過程需要分配採用靜態資源引用的屬性值時。

。如果已知資源不會發生改變,選擇靜態資源

dynamicresource

則通過建立乙個表示式來處理鍵。該表示式直到實際執行應用程式時才進行求值並提供值。如果使用系統資源或者其他執行時會發生改變的資源,選擇動態資源。包括系統資源,或使用者可設定的資源。例如,您可以建立引用由 systemcolors

、systemfonts

或 systemparameters

公開的系統屬性。

這下面是執行結果,隨著系統顯示屬性字型大小而動態的變化。

WPF學習之路(一) 初識WPF

參考 葵花寶典 wpf自學手冊 vs2012 先建立第乙個wpf小程式 1.建立wpf程式 2.檢視solution,wpf中xaml檔案和cs檔案經常成對出現 3.新增button和click事件 mainwindow.xaml mainwindow.xaml.cs private void bu...

WPF學習之路(十三)URL

url一般由三個部分組成,協議 資源所在主機位址 資源路徑 資源檔案 本地程式集 引用的程式集 內容檔案 uri uri new uri pack siteoforigin soofile.xaml urikind.absolute 源站點檔案 uri uri new uri pack siteof...

WPF學習之路(二) XAML

在wpf中引入了xaml語言,主要用於介面設計,業務邏輯則使用c 實現後台 將介面設計與業務邏輯分離 xaml是一種宣告式語言,類似xml html 示例 hello xaml 這是乙個普通的button hello xaml 在面板 dockpanel 視窗中有兩個button xaml有兩個重要...