程式碼中的資源 (WPF .NET)

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

從程式碼存取資源

如果您要求程式碼中的資源,識別 XAML 定義資源的索引鍵也會用來擷取特定資源。 從程式碼擷取資源最簡單的方式,就是從應用程式中的架構層級物件呼叫 FindResourceTryFindResource 方法。 這些方法之間的行為差異在於找不到要求的金鑰時會發生什麼事。 FindResource 引發例外狀況。 TryFindResource 不會引發例外狀況,但會傳 null 回 。 每個方法都會取得資源索引鍵做為輸入參數,並傳回弱類型的物件。

一般而言,資源索引鍵是字串,但偶爾會 使用非字串。 程式碼資源解析的查閱邏輯與動態資源參考 XAML 案例相同。 搜尋資源會從呼叫專案開始,然後繼續透過邏輯樹狀結構中的父元素。 查閱會視需要繼續尋找應用程式資源、主題和系統資源。 資源的程式碼要求會適當地考慮執行時間期間所發生的資源變更。

下列程式碼範例示範 Click 事件處理常式,依索引鍵尋找資源,並使用傳回的值來設定屬性。

private void myButton_Click(object sender, RoutedEventArgs e)
{
    Button button = (Button)sender;
    button.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub myButton_Click(sender As Object, e As RoutedEventArgs)
    Dim buttonControl = DirectCast(sender, Button)
    buttonControl.Background = DirectCast(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 標記延伸

如需詳細資訊,請參閱 Styles、DataTemplates 和隱含索引鍵

另請參閱