{StaticResource} 標記延伸
藉由評估已定義資源的參考,為任何 XAML 屬性提供值。 資源是在 ResourceDictionary 中定義,而 StaticResource 使用方式會參考 ResourceDictionary 中該資源的索引鍵。
XAML 屬性用法
<object property="{StaticResource key}" .../>
XAML 值
詞彙 | 描述 |
---|---|
key | 要求資源的金鑰。 此索引鍵一開始是由 ResourceDictionary 指派。 資源索引鍵可以是 XamlName 文法中定義的任何字串。 |
備註
StaticResource 是一種技術,可用來取得 XAML 屬性的值,該屬性是在 XAML 資源字典中其他地方定義的。 值可能會放在資源字典中,因為它們是要由多個屬性值共用,或是因為 XAML 資源字典用來做為 XAML 封裝或分解技術。 XAML 封裝技術的範例是控制項的主題字典。 另一個範例是用於資源後援的合併資源字典。
StaticResource 會採用一個引數,指定所要求資源的索引鍵。 資源索引鍵一律是 Windows 執行階段 XAML 中的字串。 如需最初如何指定資源索引鍵的詳細資訊,請參閱 x:Key attribute。
本主題未描述 StaticResource 解析為資源字典中的項目的規則。 這取決於參考和資源是否同時存在於範本中、是否使用合併的資源字典等等。 有關如何定義資源和正確使用 ResourceDictionary 的詳細資訊 (包括範例程式碼),請參閱 ResourceDictionary 和 XAML 資源參考。
重要:StaticResource 不得嘗試對 XAML 檔案中進一步定義的資源進行向前參考。 不支援嘗試這樣做。 即使前向參考沒有失敗,嘗試進行向前參考也會帶來效能損失。 為了獲得最佳結果,請調整資源字典的組成,以避免向前參考。
嘗試將 StaticResource 指定給無法解析在執行階段擲回 XAML 剖析例外狀況的索引鍵。 設計工具也可能提供警告或錯誤。
在 Windows 執行階段 XAML 處理器實作中,StaticResource 功能沒有支援類別表示法。 StaticResource 專供 XAML 使用。 程式碼中最接近的等效項是使用 ResourceDictionary 的集合 API,例如呼叫 Contains 或 TryGetValue。
{ThemeResource} 標記延伸是類似的標記延伸,參考另一個位置的具名資源。 差異在於 {ThemeResource} 標記延伸能夠根據使用中的系統主題傳回不同的資源。 如需詳細資訊,請參閱 {ThemeResource} 標記延伸。
StaticResource 標記延伸。 如果必須將屬性 (Attribute) 值加上逸出符號,以免成為常值或處理常式名稱,而且這個動作必須更全面地實施 (而不是只對特定類型或屬性 (Property) 設定類型轉換子 (Type Converter)),則通常會實作標記延伸。 XAML 中的所有標記延伸在其屬性語法中都使用「{" and "}」字元,這是 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 2013 可以在 Microsoft IntelliSense 下拉式清單中包含可能的索引鍵值。 例如,只要您輸入「{StaticResource」,目前查閱範圍中的任何資源索引鍵就會顯示在 IntelliSense 下拉式清單中。 除了您在頁面層級 (FrameworkElement.Resources) 和應用程式層級 (Application.Resources) 上擁有的一般資源之外,您也會看到 XAML 主題資源,以及專案正在使用之任何延伸模組的資源。
一旦資源鍵做為任何 {StaticResource} 用法的一部分存在,「前往定義」(F12) 功能就可以解析該資源並向您顯示定義該資源的字典。 針對主題資源,這會前往 generic.xaml 進行設計階段。
相關主題
- ResourceDictionary 與 XAML 資源參考
- ResourceDictionary \(英文\)
- x:Key 屬性 \(部分機器翻譯\)
- {ThemeResource} 標記延伸