Ekstensi markup {StaticResource}

Menyediakan 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 XamlName Grammar.

Keterangan

StaticResource adalah teknik untuk mendapatkan nilai untuk atribut XAML yang didefinisikan di tempat lain dalam kamus sumber daya XAML. Nilai mungkin ditempatkan dalam kamus sumber daya karena dimaksudkan untuk dibagikan oleh beberapa nilai properti, atau karena kamus sumber daya XAML digunakan sebagai teknik pengemasan atau faktor 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 merupakan string di Windows Runtime XAML. Untuk informasi selengkapnya tentang bagaimana kunci sumber daya awalnya ditentukan, lihat atribut x:Key.

Aturan di mana StaticResource diselesaikan ke item dalam kamus sumber daya tidak dijelaskan dalam topik ini. Itu tergantung pada apakah referensi dan sumber daya keduanya ada dalam templat, apakah kamus sumber daya gabungan digunakan, dan sebagainya. Untuk informasi 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 penerusan ke sumber daya yang didefinisikan secara leksikal lebih jauh dalam file XAML. Mencoba melakukannya tidak didukung. Bahkan jika referensi maju tidak gagal, mencoba membuatnya membawa penalti performa. Untuk hasil terbaik, sesuaikan komposisi kamus sumber daya Anda sehingga referensi ke depan dihindari.

Mencoba menentukan StaticResource ke kunci yang tidak dapat menyelesaikan melempar pengecualian penguraian XAML pada durasi. Alat desain juga dapat menawarkan peringatan atau kesalahan.

Dalam implementasi prosesor XAML Windows Runtime, tidak ada representasi kelas pencadangan untuk fungsionalitas StaticResource . StaticResource secara eksklusif digunakan dalam XAML. Yang paling setara dalam kode adalah menggunakan API pengumpulan ResourceDictionary, misalnya memanggil Contains atau TryGetValue.

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

StaticResource adalah ekstensi markup. Ekstensi markup biasanya diimplementasikan ketika ada persyaratan untuk menghindari nilai atribut agar selain nilai harfiah atau nama handler, dan persyaratannya lebih global daripada hanya menempatkan pengonversi jenis pada jenis atau properti tertentu. Semua ekstensi markup di XAML menggunakan karakter "{" dan "}" dalam sintaks atributnya, yang merupakan konvensi di mana prosesor XAML mengenali bahwa ekstensi markup harus memproses atribut .

Contoh penggunaan {StaticResource}

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 dalam 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, sehingga ada dua penggunaan ekstensi markup berlapis di sini. Bagian 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 kemungkinan nilai kunci 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 menu dropdown IntelliSense. Selain sumber daya umum 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 Buka Definisi (F12) dapat menyelesaikan sumber daya tersebut dan menunjukkan kamus tempatnya ditentukan. Untuk sumber daya tema, ini masuk ke generic.xaml untuk waktu desain.