Bagikan melalui


x:Arahan Argumen

Mengemas argumen konstruksi untuk deklarasi elemen objek konstruktor non-parameter di XAML, atau untuk deklarasi objek metode pabrik.

Penggunaan Elemen XAML (Konstruktor tanpa pamrih)

<object ...>
  <x:Arguments>
    oneOrMoreObjectElements
  </x:Arguments>
</object>

Penggunaan Elemen XAML (metode pabrik)

<object x:FactoryMethod="methodName"...>
  <x:Arguments>
    oneOrMoreObjectElements
  </x:Arguments>
</object>

Nilai XAML

Nilai Deskripsi
oneOrMoreObjectElements Satu atau beberapa elemen objek yang menentukan argumen yang akan diteruskan ke konstruktor non-parameter atau metode pabrik yang mendukung.

Penggunaan umumnya adalah menggunakan teks inisialisasi dalam elemen objek untuk menentukan nilai argumen aktual. Lihat bagian Contoh.

Urutan elemen signifikan. Jenis XAML harus sesuai dengan jenis dan urutan jenis konstruktor pendukung atau kelebihan metode pabrik.
methodName Nama metode pabrik yang harus memproses argumen apa pun x:Arguments .

Dependensi

x:FactoryMethod dapat mengubah cakupan dan perilaku jika x:Arguments berlaku.

Jika tidak x:FactoryMethod ada yang ditentukan, x:Arguments berlaku untuk tanda tangan alternatif (non-default) dari konstruktor cadangan.

Jika x:FactoryMethod ditentukan, x:Arguments berlaku untuk kelebihan beban metode bernama.

Keterangan

XAML 2006 dapat mendukung inisialisasi non-default melalui teks inisialisasi. Namun, penerapan praktis teknik konstruksi teks inisialisasi terbatas. Teks inisialisasi diperlakukan sebagai string teks tunggal; oleh karena itu, ini hanya menambahkan kemampuan untuk inisialisasi parameter tunggal kecuali pengonversi jenis didefinisikan untuk perilaku konstruksi yang dapat mengurai item informasi kustom dan pemisah kustom dari string. Selain itu, string teks ke logika objek berpotensi menjadi pengonversi jenis default asli pengurai XAML tertentu untuk menangani primitif selain string benar.

Penggunaan x:Arguments XAML bukan penggunaan elemen properti dalam arti umum, karena markup direktif tidak mereferensikan jenis elemen objek yang berisi. Ini lebih mirip dengan arahan lain seperti x:Code di mana elemen menunjukkan rentang di mana markup harus ditafsirkan sebagai selain default untuk konten anak. Dalam hal ini, jenis XAML dari setiap elemen objek mengomunikasikan informasi tentang jenis argumen, yang digunakan oleh pengurai XAML untuk menentukan metode pabrik konstruktor tertentu mana yang ditandatangani oleh penggunaan yang x:Arguments mencoba mereferensikan.

x:Arguments untuk elemen objek yang sedang dibangun harus mendahului elemen properti, konten, teks dalam, atau string inisialisasi lainnya dari elemen objek. Elemen objek dalam x:Arguments dapat mencakup atribut dan string inisialisasi, seperti yang diizinkan oleh jenis XAML tersebut dan konstruktor pendukung atau metode pabriknya. Untuk objek atau argumen, Anda dapat menentukan jenis XAML kustom atau jenis XAML yang berada di luar namespace XAML default dengan mereferensikan pemetaan awalan yang dibuat.

Prosesor XAML menggunakan panduan berikut untuk menentukan bagaimana argumen yang ditentukan x:Arguments harus digunakan untuk membuat objek. Jika x:FactoryMethod ditentukan, informasi dibandingkan dengan yang ditentukan x:FactoryMethod (perhatikan bahwa nilai x:FactoryMethod adalah nama metode, dan metode bernama dapat memiliki kelebihan beban. Jika x:FactoryMethod tidak ditentukan, informasi dibandingkan dengan kumpulan semua overload konstruktor publik objek. Logika pemrosesan XAML kemudian membandingkan jumlah parameter dan memilih kelebihan beban dengan aritas yang cocok. Jika ada lebih dari satu kecocokan, prosesor XAML harus membandingkan jenis parameter berdasarkan jenis XAML dari elemen objek yang disediakan. Jika masih ada lebih dari satu kecocokan, perilaku prosesor XAML tidak ditentukan. x:FactoryMethod Jika ditentukan tetapi metode tidak dapat diselesaikan, prosesor XAML harus melemparkan pengecualian.

Penggunaan <x:Arguments>string</x:Arguments> atribut XAML dimungkinkan secara teknis. Namun, ini tidak memberikan kemampuan selain apa yang dapat dilakukan sebaliknya melalui teks inisialisasi dan pengonversi jenis, dan menggunakan sintaks ini bukan niat desain fitur metode pabrik XAML 2009.

Contoh

Contoh berikut menunjukkan tanda tangan konstruktor tanpa parameter, lalu penggunaan XAML yang x:Arguments mengakses tanda tangan tersebut.

public class Food {
  private string _name;
  private Int32 _calories;
  public Food(string name, Int32 calories) {
      _name=name;
      _calories=calories;
  }
}
<my:Food>
  <x:Arguments>
      <x:String>Apple</x:String>
      <x:Int32>150</x:Int32>
  </x:Arguments>
</my:Food>

Contoh berikut menunjukkan tanda tangan metode pabrik target, lalu penggunaan XAML yang x:Arguments mengakses tanda tangan tersebut.

public Food TryLookupFood(string name)
{
switch (name) {
  case "Apple": return new Food("Apple",150);
  case "Chocolate": return new Food("Chocolate",200);
  case "Cheese": return new Food("Cheese", 450);
  default: {return new Food(name,0);
}
}
<my:Food x:FactoryMethod="TryLookupFood">
  <x:Arguments>
      <x:String>Apple</x:String>
  </x:Arguments>
</my:Food>

Baca juga