透過評估已定義資源的參考,為任何 XAML 屬性提供值。 資源是在 ResourceDictionary 中定義,而 StaticResource 使用方式會參考 ResourceDictionary 中該資源的索引鍵。
XAML 屬性使用方式
<object property="{StaticResource key}" .../>
XAML 值
| 術語 | Description |
|---|---|
| Key | 所要求資源的金鑰。 此索引鍵最初是由 ResourceDictionary 指派的。 資源索引鍵可以是 XamlName 文法中定義的任何字串。 |
備註
StaticResource 是一種技術,用於取得 XAML 資源字典中其他位置所定義的 XAML 屬性值。 值可能會放在資源字典中,因為它們要由多個屬性值共用,或因為 XAML 資源字典是作為 XAML 封裝或模組化技術。 XAML 封裝技術的範例是控制項的主題字典。 另一個範例是用於資源後援的合併資源字典。
StaticResource 採用一個引數,以指定所要求資源的索引鍵。 資源索引鍵一律是 Windows 執行階段 XAML 中的字串。 如需一開始如何指定資源索引鍵的詳細資訊,請參閱 x:Key 屬性。
本主題未說明 StaticResource 解析為資源字典中項目的規則。 這取決於參考和資源是否同時存在於範本中、是否使用合併的資源字典等等。 如需如何定義資源和正確使用 ResourceDictionary (包括範例程式碼) 的詳細資訊,請參閱 ResourceDictionary 和 XAML 資源參考。
重要在 XAML 檔案中,StaticResource 不得嘗試引用在文檔中後面定義的資源。 不支援嘗試這樣做。 即使前向參考沒有失敗,嘗試進行一個也會產生性能損失。 為了獲得最佳結果,請調整資源字典的組成,以避免正向參照。
嘗試將 StaticResource 指定給無法解析的索引鍵,會在執行階段擲回 XAML 剖析例外狀況。 設計工具也可能提供警告或錯誤。
在 Windows 執行階段 XAML 處理器實作中,StaticResource 功能沒有後備的類別。 StaticResource 專供在 XAML 中使用。 程式碼中最接近的對等專案是使用 ResourceDictionary 的集合 API,例如呼叫 Contains 或 TryGetValue。
{ThemeResource} 標記延伸模組 是類似的標記延伸模組,會參考另一個位置的具名資源。 差異在於 {ThemeResource} 標記延伸模組能夠根據作用中的系統主題傳回不同的資源。 如需詳細資訊,請參閱 {ThemeResource} 標記延伸模組。
StaticResource 是標記延伸模組。 當需要轉義屬性值為非文字值或處理常式名稱時,通常會實作標記擴充,比僅放在某些類型或屬性上的型別轉換器更具普遍性。 XAML 中的所有標記延伸模組都會在其屬性語法中使用 “{” 和 “}” 字元,這是 XAML 處理器辨識標記延伸模組必須處理屬性的慣例。
{StaticResource} 使用方式範例
此範例 XAML 取自 XAML 資料繫結範例。
<StackPanel Margin="5">
<!-- Add converter as a resource to reference it from a Binding. -->
<StackPanel.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</StackPanel.Resources>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Percent grade:" Margin="5" />
<Slider x:Name="sliderValueConverter" Minimum="1" Maximum="100" Value="70" Margin="5"/>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Letter grade:" Margin="5"/>
<TextBox x:Name="tbValueConverterDataBound"
Text="{Binding ElementName=sliderValueConverter, Path=Value, Mode=OneWay,
Converter={StaticResource GradeConverter}}" Margin="5" Width="150"/>
</StackPanel>
此特定範例會建立自訂類別所支援的物件,並將它建立為 ResourceDictionary 中的資源。 若要成為有效的資源,此 local:S2Formatter 元素也必須具有 x:Key 屬性值。 屬性的值設定為 “GradeConverter”。
然後,資源會在 XAML 的稍後部分中被調用,您能看到 {StaticResource GradeConverter}。
請注意 {StaticResource} 標記延伸模組使用方式如何設定另一個標記延伸模組 {Binding} 標記延伸模組的屬性,因此這裡有兩個巢狀標記延伸模組使用方式。 內層的內容先被評估,以便能夠優先取得資源,並將其作為數值使用。 {Binding} 標記延伸模組中也顯示相同的範例。
{StaticResource} 標記延伸模組的設計階段工具支援
當您在 XAML 頁面中使用 {StaticResource} 標記擴充時,Microsoft Visual Studio 可以在 Microsoft IntelliSense 下拉選單中包含可能的索引鍵值。 例如,只要您輸入 “{StaticResource”,目前查閱範圍中的任何資源索引鍵都會顯示在 IntelliSense 下拉式清單中。 除了頁面層級 (FrameworkElement.Resources) 和應用程式層級 (Application.Resources) 的一般資源之外,您也會看到 XAML 主題資源,以及專案所使用之任何延伸模組的資源。
一旦資源索引鍵作為任何 {StaticResource} 用法的一部分存在,按 前往定義(F12 快捷鍵)功能就可以解析該資源,並顯示定義該資源的字典。 針對佈景主題資源,這會移至 generic.xaml 以進行設計階段。