{StaticResource} markup extension

Memberikan nilai untuk atribut XAML apa pun dengan mengevaluasi referensi ke sumber daya yang sudah ditentukan. Sumber daya didefinisikan dalam ResourceDictionary, dan penggunaan StaticResource mereferensikan kunci sumber daya tersebut di ResourceDictionary.

Penggunaan atribut XAML

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

Nilai XAML

Istilah Deskripsi
kunci Kunci untuk sumber daya yang diminta. Kunci ini awalnya ditetapkan oleh ResourceDictionary. Kunci sumber daya dapat berupa string apa pun yang ditentukan dalam Tata Bahasa XamlName.

Keterangan

StaticResource adalah teknik untuk mendapatkan nilai untuk atribut XAML yang didefinisikan di tempat lain dalam kamus sumber daya XAML. Nilai dapat ditempatkan dalam kamus sumber daya karena dimaksudkan untuk dibagikan oleh beberapa nilai properti, atau karena kamus sumber daya XAML digunakan sebagai teknik pengemasan atau anjak piutant XAML. Contoh teknik pengemasan XAML adalah kamus tema untuk kontrol. Contoh lain adalah kamus sumber daya gabungan yang digunakan untuk fallback sumber daya.

StaticResource mengambil satu argumen, yang menentukan kunci untuk sumber daya yang diminta. Kunci sumber daya selalu berupa string dalam runtime XAML Windows. Untuk info selengkapnya tentang bagaimana kunci sumber daya awalnya ditentukan, lihat atribut x:Key.

Aturan di mana StaticResource menyelesaikan item dalam kamus sumber daya tidak dijelaskan dalam topik ini. Itu tergantung pada apakah referensi dan sumber daya keduanya ada dalam template, apakah kamus sumber daya yang digabungkan digunakan, dan sebagainya. Untuk info selengkapnya tentang cara menentukan sumber daya dan menggunakan ResourceDictionary dengan benar, termasuk kode sampel, lihat Referensi sumber daya ResourceDictionary dan XAML.

PentingStaticResource tidak boleh mencoba membuat referensi ke depan ke sumber daya yang didefinisikan secara leksikal lebih jauh dalam file XAML. Mencoba untuk melakukannya tidak didukung. Bahkan jika referensi ke depan tidak gagal, mencoba membuat seseorang membawa penalti kinerja. Untuk hasil terbaik, sesuaikan komposisi kamus sumber daya Anda sehingga referensi ke depan dihindari.

Mencoba menentukan StaticResource ke kunci yang tidak dapat diselesaikan melempar pengecualian parse XAML pada waktu berjalan. Alat desain juga dapat menawarkan peringatan atau kesalahan.

Dalam implementasi prosesor runtime XAML Windows, tidak ada representasi kelas pendukung untuk fungsionalitas StaticResource. StaticResource secara eksklusif untuk digunakan di XAML. Setara terdekat dalam kode adalah menggunakan API koleksi ResourceDictionary, misalnya memanggil Contains atau TryGetValue.

{ThemeResource} markup extension adalah ekstensi markup serupa yang mereferensikan sumber daya bernama di lokasi lain. Perbedaannya adalah bahwa ekstensi markup {ThemeResource} memiliki kemampuan untuk mengembalikan sumber daya yang berbeda tergantung pada tema sistem yang aktif. Untuk info selengkapnya lihat ekstensi markup {ThemeResource}.

StaticResource adalah ekstensi markup. Ekstensi markup biasanya diimplementasikan ketika ada persyaratan untuk melarikan diri dari nilai atribut selain nilai literal atau nama penangan, dan persyaratannya lebih global daripada hanya menempatkan konverter tipe pada jenis atau properti tertentu. Semua ekstensi markup di XAML menggunakan karakter "{" dan "}" dalam sintaks atribut mereka, yang merupakan konvensi di mana prosesor XAML mengakui bahwa ekstensi markup harus memproses atribut.

Contoh {StaticResource} usage

Contoh XAML ini diambil dari sampel pengikatan data 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> 

Contoh khusus ini membuat objek yang didukung oleh kelas kustom, dan membuatnya sebagai sumber daya di ResourceDictionary. Untuk menjadi sumber daya yang valid, elemen ini local:S2Formatter juga harus memiliki nilai atribut x:Key . Nilai atribut diatur ke "GradeConverter".

Sumber daya kemudian diminta hanya sedikit lebih jauh ke XAML, di mana Anda melihat {StaticResource GradeConverter}.

Perhatikan bagaimana penggunaan ekstensi markup {StaticResource} mengatur properti ekstensi markup lain {Binding} ekstensi markup, jadi ada dua penggunaan ekstensi markup bersarang di sini. Yang dalam dievaluasi terlebih dahulu, sehingga sumber daya diperoleh terlebih dahulu dan dapat digunakan sebagai nilai. Contoh yang sama ini juga ditampilkan dalam ekstensi markup {Binding}.

Dukungan alat waktu desain untuk ekstensi markup {StaticResource}

Microsoft Visual Studio 2013 dapat menyertakan nilai kunci yang mungkin dalam dropdown Microsoft IntelliSense saat Anda menggunakan ekstensi markup {StaticResource} di halaman XAML. Misalnya, segera setelah Anda mengetik "{StaticResource", salah satu kunci sumber daya dari cakupan pencarian saat ini ditampilkan di dropdown IntelliSense. Selain sumber daya khas yang Anda miliki di tingkat halaman (FrameworkElement.Resources) dan tingkat aplikasi (Application.Resources), Anda juga melihat sumber daya tema XAML, dan sumber daya dari ekstensi apa pun yang digunakan proyek Anda.

Setelah kunci sumber daya ada sebagai bagian dari penggunaan {StaticResource }, fitur Go To Definition (F12) dapat menyelesaikan sumber daya tersebut dan menunjukkan kepada Anda kamus di tempat yang ditentukan. Untuk sumber daya tema, ini masuk ke generic.xaml untuk waktu desain.