資源和程式碼

此概觀著重于如何使用程式碼來存取或建立 Windows Presentation Foundation (WPF) 資源,而不是可延伸的應用程式標記語言 (XAML) 語法。 如需 XAML 語法觀點中一般資源使用量和資源的詳細資訊,請參閱 XAML 資源

從程式碼存取資源

如果您要求程式碼中的資源,識別資源是否透過 XAML 定義的索引鍵也會用來擷取特定資源。 從程式碼擷取資源最簡單的方式,就是從應用程式中的架構層級物件呼叫 FindResourceTryFindResource 方法。 這些方法之間的行為差異在於,找不到要求的索引鍵時會發生什麼情況。 FindResource 引發例外狀況; TryFindResource 不會引發例外狀況,但會傳 null 回 。 每個方法都會取得資源索引鍵做為輸入參數,並傳回弱類型的物件。 一般而言,資源索引鍵是一個字串,但偶而會有非字串的使用方式;如需詳細資訊,請參閱使用物件做為索引鍵一節。 通常您會將傳回的物件轉型為您在要求資源時設定之屬性所需的類型。 程式碼資源解析的查閱邏輯與動態資源參考 XAML 案例相同。 資源的搜尋會從呼叫元素開始,然後繼續進行邏輯樹狀結構中後續的父元素。 查閱會視需要繼續尋找應用程式資源、主題和系統資源。 資源的程式碼要求會適當地說明資源字典中的執行時間變更,這些變更可能在從 XAML 載入該資源字典之後進行,以及用於即時系統資源變更。

以下簡短的程式碼範例會依索引鍵尋找資源,並使用傳回的值來設定實作為 Click 事件處理常式的屬性。

void SetBGByResource(object sender, RoutedEventArgs e)
{
  Button b = sender as Button;
  b.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub SetBGByResource(ByVal sender As Object, ByVal e As RoutedEventArgs)
  Dim b As Button = TryCast(sender, Button)
  b.Background = CType(Me.FindResource("RainbowBrush"), Brush)
End Sub

指派資源參考 SetResourceReference 的替代方法是 。 這個方法會採用兩個參數︰資源的索引鍵,以及特殊相依性屬性的識別碼,該屬性會出現在應指派資源值的元素執行個體上。 在功能上,這個方法是一樣的,而且優點是不需要對傳回值進行任何轉型。

以程式設計方式存取資源的另一種方式是以字典方式存取屬性的內容 Resources 。 同樣地,存取這個屬性所包含的字典包括,您如何將新資源新增至現有的集合、檢查以查看是否已經在集合中取得指定的索引鍵名稱,以及其他的字典/集合作業。 如果您要以程式碼撰寫 WPF 應用程式,您也可以在程式碼中建立整個集合、將索引鍵指派給它,然後將完成的集合指派給 Resources 已建立專案的 屬性。 下一節將說明此動作。

您可以使用特定索引鍵作為索引,在任何指定的 Resources 集合內編制索引,但您應該注意,以這種方式存取資源不會遵循資源解析的一般執行時間規則。 您只能存取該特定的集合。 如果在要求的索引鍵上在找不到任何有效的物件,資源查閱就不會將範圍周遊至根項目或應用程式。 不過,此方法在某些情況下恰巧具有效能優點,因為索引鍵的搜尋範圍更加限定。 如需如何直接使用資源字典的詳細資訊,請參閱 類別 ResourceDictionary

使用程式碼建立資源

如果您想要在程式碼中建立整個 WPF 應用程式,您可能也想要在程式碼中在該應用程式中建立任何資源。 若要達成此目的,請建立新的 ResourceDictionary 實例,然後使用對 的後續呼叫 ResourceDictionary.Add ,將所有資源新增至字典。 然後,使用 ResourceDictionary 建立的 ,在頁面範圍 Application.Resources 或 中存在的專案上設定 Resources 屬性。 您也可以將 維護 ResourceDictionary 為獨立物件,而不將其新增至 專案。 不過,如果這麼做,您必須依項目索引鍵存取其中的資源,就如同它是泛型字典。 ResourceDictionary未附加至專案屬性的 ,不會存在做為專案 Resources 樹狀結構的一部分,而且在查閱序列中沒有任何範圍可供 和相關方法使用 FindResource

使用物件做為索引鍵

大多數的資源使用方式會將資源的索引鍵設定為字串。 不過,各種 WPF 功能故意不會使用字串類型來指定索引鍵,而此參數是 物件。 WPF 樣式和主題支援會使用讓資源成為物件索引鍵的功能。 主題中成為非樣式控制項之預設樣式的樣式,都是由 Type 其應套用之控制項的 索引鍵。 依類型做為索引鍵,會提供可靠的查閱機制,在每個控制項類型的預設執行個體上運作,而且類型可以依反射來偵測,並用於設定衍生類型的樣式,即使衍生的類型不具預設樣式也一樣。 您可以使用 x:Type 標記延伸 ,為 XAML 中定義的資源指定 Type 索引鍵。 支援 WPF 功能的其他非字串索引鍵使用方式也有類似的延伸,例如 ComponentResourceKey 標記延伸

另請參閱