{StaticResource} 標記延伸

藉由評估已定義資源的參考,為任何 XAML 屬性提供值。 資源是在 ResourceDictionary 中定義,而 StaticResource 使用方式會參考 ResourceDictionary 中該資源的索引鍵。

XAML 屬性用法

<object property="{StaticResource key}" .../>

XAML 值

詞彙 描述
索引鍵 要求資源的金鑰。 此索引鍵一開始是由 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,例如呼叫 ContainsTryGetValue

{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 進行設計階段。