共用方式為


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

本概述將著重於如何使用程式碼存取或建立 Windows Presentation Foundation (WPF) 資源,而非 XAML 語法。 如需從 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,在出現於頁面範圍中的元素上設定 Resources 屬性或 Application.Resources。 您也可以保留 ResourceDictionary 作為獨立物件,而不將其新增到元素。 不過,如果這麼做,您必須依項目索引鍵存取其中的資源,就如同它是泛型字典。 未附加至元素 Resources 屬性的 ResourceDictionary 不會作為專案樹狀結構的一部分存在,而且在查詢序列中沒有任何範圍可供 FindResource 和相關方法使用。

使用物件作為索引鍵

大多數的資源使用方式會將資源的索引鍵設定為字串。 不過,各種 WPF 功能會刻意使用物件類型作為索引鍵,而不是字串。 讓物件類型將資源當成索引鍵的功能,是透過 WPF 樣式和佈景主題支援來使用。 樣式和佈景主題會成為非樣式控制項的預設值,每個樣式都由它們應套用的控制項的 Type 用來當作索引鍵。

由類型當成索引鍵時,提供可靠的查詢機制,可在每個控制項類型的預設執行個體上運作。 即使衍生類型沒有預設樣式,也可以透過反映來偵測類型,並用於設定衍生類別的樣式。 您可以使用 X:Type 標記延伸,針對 XAML 中定義的資源指定 Type 索引鍵。 還有類似的延伸可供支援 WPF 功能的其他非字串索引鍵用法使用,例如 ComponentResourceKey 標記延伸

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

另請參閱