Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Topik ini lebih lanjut menjelaskan keberadaan dan tujuan dari dua pemetaan namespace XAML seperti yang sering ditemukan dalam tag akar file WPF XAML. Ini juga menjelaskan cara menghasilkan pemetaan serupa untuk menggunakan elemen yang ditentukan dalam kode Anda sendiri, dan/atau dalam rakitan terpisah.
Apa itu Namespace XAML
Namespace XAML benar-benar merupakan ekstensi dari konsep namespace XML. Teknik menentukan namespace XAML mengandalkan sintaks namespace XML, konvensi penggunaan URI sebagai pengidentifikasi namespace, menggunakan awalan untuk menyediakan sarana untuk mereferensikan beberapa namespace dari sumber markup yang sama, dan sebagainya. Konsep utama yang ditambahkan ke definisi XAML dari namespace XML adalah bahwa namespace XAML menyiratkan cakupan keunikan untuk penggunaan markup, dan juga memengaruhi bagaimana entitas markup berpotensi didukung oleh namespace CLR tertentu dan rakitan yang direferensikan. Pertimbangan terakhir ini juga dipengaruhi oleh konsep konteks skema XAML. Tetapi untuk tujuan cara kerja WPF dengan namespace XAML, Anda umumnya dapat memikirkan namespace XAML dalam hal namespace XAML default, namespace bahasa XAML, dan namespace XAML lebih lanjut yang dipetakan secara langsung oleh markup XAML Anda ke namespace CLR pendukung tertentu serta rakitan yang direferensikan.
Deklarasi Namespace WPF dan XAML
Dalam deklarasi namespace dalam tag root banyak file XAML, Anda akan melihat bahwa biasanya ada dua deklarasi namespace XML. Deklarasi pertama memetakan namespace XAML klien/kerangka kerja WPF secara keseluruhan sebagai default:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Deklarasi kedua memetakan namespace XAML terpisah, memetakannya (biasanya) ke awalan x: .
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Hubungan antara deklarasi-deklarasi ini adalah bahwa pemetaan awalan x: mendukung fungsi bawaan yang merupakan bagian dari definisi bahasa XAML, dan WPF adalah salah satu implementasi yang menggunakan XAML sebagai bahasa serta mendefinisikan kosakata objeknya di dalam XAML. Karena penggunaan kosakata WPF akan jauh lebih umum daripada penggunaan intrinsik XAML, kosakata WPF dipetakan sebagai default.
Konvensi x: awalan untuk memetakan dukungan intrinsik bahasa XAML diikuti oleh templat proyek, kode sampel, dan dokumentasi fitur bahasa dalam SDK ini. Namespace XAML mendefinisikan banyak fitur yang umum digunakan yang diperlukan bahkan untuk aplikasi WPF dasar. Misalnya, untuk menggabungkan kode apa pun ke file XAML melalui kelas parsial, Anda harus memberi nama kelas tersebut x:Class sebagai atribut dalam elemen akar file XAML yang relevan. Atau, elemen apa pun yang didefinisikan dalam halaman XAML dan ingin Anda akses sebagai sumber daya dengan kunci harus memiliki atribut x:Key yang diatur pada elemen tersebut. Untuk informasi selengkapnya tentang ini dan aspek XAML lainnya, lihat XAML dalam Sintaks WPF atau XAML Secara Terperinci.
Pemetaan ke Kelas dan Rakitan Kustom
Anda dapat memetakan namespace XML ke assembly menggunakan serangkaian token dalam deklarasi awalan xmlns, serupa dengan cara namespace XAML standar WPF dan intrinsik XAML dipetakan ke awalan.
Sintaks mengambil kemungkinan token bernama berikut dan nilai berikut:
clr-namespace: Namespace CLR yang dideklarasikan dalam assembly yang berisi tipe publik yang akan diekspos sebagai elemen.
assembly= Rakitan yang berisi beberapa atau semua namespace CLR yang dirujuk. Nilai ini biasanya hanya nama rakitan, bukan jalur, dan tidak menyertakan ekstensi (seperti .dll atau .exe). Jalur ke assembly tersebut harus ditetapkan sebagai referensi proyek dalam file proyek yang berisi XAML yang anda coba petakan. Agar memasukkan versi dan penandatanganan nama yang kuat (strong-name), nilai assembly dapat berupa string seperti yang didefinisikan oleh AssemblyName, bukan nama string sederhana.
Perhatikan bahwa karakter yang memisahkan clr-namespace token dari nilainya adalah titik dua (:) sedangkan karakter yang memisahkan assembly token dari nilainya adalah tanda sama dengan (=). Karakter yang digunakan di antara kedua token ini adalah titik koma. Selain itu, jangan sertakan ruang kosong di mana saja dalam deklarasi.
Contoh pemetaan kustom dasar
Kode berikut mendefinisikan contoh kelas kustom:
namespace SDKSample {
public class ExampleClass : ContentControl {
public ExampleClass() {
...
}
}
}
Namespace SDKSample
Public Class ExampleClass
Inherits ContentControl
...
Public Sub New()
End Sub
End Class
End Namespace
Kelas kustom ini kemudian dikompilasi ke dalam pustaka, yang sesuai pengaturan proyek (tidak ditampilkan) diberi nama SDKSampleLibrary.
Untuk mereferensikan kelas kustom ini, Anda juga perlu menyertakannya sebagai referensi untuk proyek Anda saat ini, yang biasanya Anda lakukan menggunakan UI Penjelajah Solusi di Visual Studio.
Sekarang setelah Anda memiliki pustaka yang berisi kelas, dan referensi ke dalamnya dalam pengaturan proyek, Anda dapat menambahkan pemetaan awalan berikut sebagai bagian dari elemen akar Anda di XAML:
xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"
Untuk menyatukan semuanya, berikut ini adalah XAML yang menyertakan pemetaan kustom bersama dengan pemetaan default dan x: umum di tag akar, lalu menggunakan referensi awalan untuk membuat instans ExampleClass di UI tersebut:
<Page x:Class="WPFApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary">
...
<custom:ExampleClass/>
...
</Page>
Pemetaan ke Majelis yang Saat Ini
assembly dapat dihilangkan jika referensi clr-namespace sedang didefinisikan dalam rakitan yang sama dengan kode aplikasi yang mereferensikan kelas kustom. Atau, sintaks yang setara untuk kasus ini adalah menetapkan assembly=, tanpa ada token string setelah tanda sama dengan.
Kelas kustom tidak dapat digunakan sebagai elemen akar halaman jika didefinisikan dalam rakitan yang sama. Kelas parsial tidak perlu dipetakan; hanya kelas yang bukan kelas parsial halaman dalam aplikasi Anda yang perlu dipetakan jika Anda ingin mereferensikannya sebagai elemen di XAML.
Memetakan Namespace CLR ke Namespace XML di Assembly
WPF mendefinisikan atribut CLR yang digunakan oleh prosesor XAML untuk memetakan beberapa namespace CLR ke satu namespace XAML. Atribut ini, XmlnsDefinitionAttribute, ditempatkan pada tingkat perakitan dalam kode sumber yang menghasilkan assembly. Kode sumber rakitan WPF menggunakan atribut ini untuk memetakan berbagai namespace umum, seperti System.Windows dan System.Windows.Controls, ke namespace http://schemas.microsoft.com/winfx/2006/xaml/presentation.
XmlnsDefinitionAttribute menerima dua parameter: nama namespace XML/XAML, dan nama namespace CLR. Lebih dari satu XmlnsDefinitionAttribute dapat ada untuk memetakan beberapa namespace CLR ke namespace XML yang sama. Setelah dipetakan, anggota namespace tersebut juga dapat dirujuk tanpa kualifikasi penuh jika diinginkan dengan memberikan pernyataan yang sesuai using di halaman kode-belakang kelas parsial. Untuk detail lebih lanjut, lihat XmlnsDefinitionAttribute.
Namespace Desainer dan Awalan Lainnya dari Templat XAML
Jika Anda bekerja dengan lingkungan pengembangan dan/atau alat desain untuk WPF XAML, Anda mungkin melihat bahwa ada namespace XAML / awalan lain yang ditentukan dalam markup XAML.
WPF Designer untuk Visual Studio menggunakan namespace perancang yang biasanya dipetakan ke awalan d:. Templat proyek yang lebih baru untuk WPF mungkin sudah memetakan namespace XAML ini untuk mendukung pertukaran XAML antara WPF Designer untuk Visual Studio dan lingkungan desain lainnya. Namespace XAML desain ini digunakan untuk mempertahankan status desain saat melakukan roundtrip UI berbasis XAML dalam perancang. Ini juga digunakan untuk fitur seperti d:IsDataSource, yang mengaktifkan sumber data runtime dalam perancang.
Awalan lain yang mungkin Anda lihat dipetakan sebagai mc:.
mc: adalah untuk kompatibilitas markup, dan memanfaatkan pola kompatibilitas markup yang belum tentu khusus XAML. Sampai batas tertentu, fitur kompatibilitas markup dapat digunakan untuk bertukar XAML antara kerangka kerja atau di seluruh batas implementasi pendukung lainnya, bekerja di antara konteks skema XAML, memberikan kompatibilitas untuk mode terbatas dalam desainer, dan sebagainya. Untuk informasi selengkapnya tentang konsep kompatibilitas markup dan bagaimana mereka berhubungan dengan WPF, lihat Fitur Bahasa Kompatibilitas Markup (mc:).
Pemuatan WPF dan Assembly
Konteks skema XAML untuk WPF terintegrasi dengan model aplikasi WPF, yang pada gilirannya menggunakan konsep yang ditentukan CLR dari AppDomain. Urutan berikut menjelaskan bagaimana konteks skema XAML menginterpretasikan cara memuat rakitan atau menemukan jenis pada waktu proses atau waktu desain, berdasarkan penggunaan AppDomain WPF dan faktor lainnya.
Iterasi melalui AppDomain, mencari rakitan yang sudah dimuat yang cocok dengan semua aspek nama, mulai dari rakitan yang terakhir dimuat.
Jika nama memenuhi syarat, gunakan Assembly.Load(String) pada nama yang memenuhi syarat.
Jika nama singkat + token kunci publik dari nama yang memenuhi syarat cocok dengan rakitan tempat markup dimuat, kembalikan rakitan tersebut.
Gunakan nama pendek + token kunci publik untuk memanggil Assembly.Load(String).
Jika nama tidak memenuhi syarat, panggil Assembly.LoadWithPartialName.
XAML yang tidak terikat tidak menggunakan Langkah 3; tidak ada assembly yang dimuat dari.
XAML yang dikompilasi untuk WPF (dihasilkan melalui XamlBuildTask) tidak menggunakan rakitan yang sudah dimuat dari AppDomain (Langkah 1). Selain itu, nama tidak boleh tidak memenuhi syarat dari output XamlBuildTask, sehingga Langkah 5 tidak berlaku.
BAML yang dikompilasi (dihasilkan melalui PresentationBuildTask) menggunakan semua langkah, meskipun BAML juga tidak boleh berisi nama rakitan yang tidak memenuhi syarat.
Lihat juga
.NET Desktop feedback