共用方式為


{StaticResource} 標記擴展

透過評估已定義資源的參考,為任何 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,例如呼叫 ContainsTryGetValue

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