WPF應用程式資源

2021-06-17 21:03:42 字數 2891 閱讀 5392

。資源是可以替換應用程式的不同位置重用的物件。

wpf 支援資源具有不同的型別。

這些資源是資源的主要兩種型別:xaml 資源和資源資料檔案。

xaml 資源的示例包括畫筆和樣式。

資源資料檔案是應用程式所需的不可執行的資料檔案。

xaml 資源的示例包括畫筆和樣式。首先我們看一下在xaml中如何使用資源

在下面的**中,定義了乙個solidcolorbrush 作為頁面根元素的乙個資源,另外定義了不同的樣式,也作為資源引用:

title

label

button

每個框架級別的元素都會有乙個resource屬性,你可以在任意元素上定義資源,通常在根元素上定義。

定義資源之後,可以通過使用指定鍵名的資源標記擴充套件語法來引用該資源以用於屬性值,那麼在程式執行的過程中是如何查詢資源的呢:

當xaml 引導程式處理button的 background的時候

background=""
資源查詢邏輯首先找資源字典中button元素,沒有資源鍵mybrush的定義,接下來就會檢查button的父元素。在page中定義的資源呢,page 的邏輯樹中的所有元素都可以訪問該資源。該xaml載入效果圖:

靜態資源查詢行為:

查詢過程在由設定屬性的元素定義的資源字典中查詢所請求的鍵。

然後,查詢過程向上遍歷邏輯樹,直到到達父元素及其資源字典為止。 

該行為在到達根元素之前將一直持續。

接下來,檢查應用程式資源。 

資源字典中的靜態資源引用必須引用在引用資源之前已在詞法上定義的資源。 

靜態資源引用無法解析前向引用。

因此,如果您使用靜態資源引用,必須設計資源字典結構,以便將逐個使用的資源定義在各相應資源字典的開頭或附近。

當我們在其整個邏輯樹上定義了2個相同名字的資源的時候,資源查詢邏輯會一層一層往上找,找到最近的為止。

button

我們在button中使用資源鍵mybrush,在其邏輯樹上定義了2個mybrush,分別在stackpanel中和page中,結果資源查詢邏輯會使用最stackpanel的。執行結果:

資源可以作為靜態資源或動態資源進行引用。我們可以看到剛才在資源標記擴充套件語法來引用該資源的時候,是使用的關鍵字staticresource。還可以使用dynamicresource,他們之間有什麼區別呢:

staticresource標記擴充套件:

通過查詢對

已定義資源的引用

,為任何 xaml 屬性特性提供值。

對該資源的查詢行為類似於載入時查詢,它會查詢以前從當前 xaml 頁的標記中載入的資源以及其他應用程式源,並且將該資源值生成為執行時物件中的屬性值。

使用方式:

dynamicresource標記擴充套件:

為任何 xaml 屬性特性提供值,

該值將推遲為對已定義的資源的引用。

該資源的查詢行為與執行時查詢類似。

使用方式:

所請求的資源的鍵。 

如果資源是在標記中建立的,則這個鍵最初是由 x:key 指令分配的;如果資源是在**中建立的,則這個鍵是在呼叫 resourcedictionary.add 時作為 key 引數提供的。

動態資源最適合以下集中情況:

動態資源查詢行為:

查詢過程在由設定屬性的元素定義的資源字典中查詢所請求的鍵。

然後,查詢過程向上遍歷邏輯樹,直到到達父元素及其資源字典為止。 

該行為在到達根元素之前將一直持續。

接下來,檢查應用程式資源。 

對於當前活動的主題,檢查主題資源字典。 

如果主題在執行時更改,將對值重新求值。

檢查系統資源。

dynamicresource

將在初始編譯過程中建立乙個臨時表示式,因而會將資源查詢延遲到實際需要所請求的資源值來構造物件時才執行。

這可能是在載入 xaml 頁之後。

將基於鍵搜尋在所有活動的資源字典中查詢資源值(從當前頁範圍開始),並且資源值將取代編譯期間的佔位符表示式。

staticresource 標記擴充套件 通過在所有可用的資源字典中查詢鍵的值來處理該鍵。

這發生在載入過程中,即載入過程需要分配採用靜態資源引用的屬性值時。

dynamicresource 標記擴充套件 則通過建立乙個表示式來處理鍵。該表示式直到實際執行應用程式時才進行求值並提供值。

區別:使用staticresource標記擴充套件 是在載入的時候查詢資源,而使用dynamicresource標記擴充套件,是在編譯過程中建立乙個臨時表示式,在載入xaml頁之後尋找資源。可以向後擴充套件。就是可以使用當前沒有定義,而在後續定義的資源。

應用程式定義檔案定義資源部分(

屬性的值)。

構成應用程式的所有其他頁可以訪問在應用程式級別定義的資源。

這種情況下,資源是宣告樣式。

xmlns=""

xmlns:x=""

下面的示例演示了引用上例中定義的應用程式級資源的 xaml 頁。在當前頁中沒有找到具有「gelbutton」鍵的資源,所以請求資源的資源查詢範圍超出當前頁,進入已定義的應用程式級資源。

執行結果:

WPF 之 WPF應用程式事件

x class xmlns xmlns x startupuri wpfwindowdeal.xaml startup namespace myfirstwpf mainwindow為窗體檔案 常用的窗體事件 1 show 顯示非模態視窗 2 showdialog 顯示模態視窗 3 close 關閉...

關閉應用程式 主程式 WPF

在wpf應用程式的關閉是有shutdownmode屬性設定,具有3中列舉型別的值 1 onlastwindowclose 應用程式最後乙個窗體關閉時關閉應用程式 2 onmainwindowclose 應用程式主窗體關閉時關閉應用程式 3 onexplicitshutdown 顯示呼叫關閉 注意以上...

關閉應用程式 主程式 WPF

在wpf應用程式的關閉是有shutdownmode屬性設定,具有3中列舉型別的值 1 onlastwindowclose 應用程式最後乙個窗體關閉時關閉應用程式 2 onmainwindowclose 應用程式主窗體關閉時關閉應用程式 3 onexplicitshutdown 顯示呼叫關閉 注意以上...