Ekstensi markup {RelativeSource}

Menyediakan sarana untuk menentukan sumber pengikatan dalam hal hubungan relatif dalam grafik objek run-time.

Penggunaan atribut XAML (Mode mandiri)

<Binding RelativeSource="{RelativeSource Self}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource Self} ...}" .../>

Penggunaan atribut XAML (mode TemplatedParent)

<Binding RelativeSource="{RelativeSource TemplatedParent}" .../>
-or-
<object property="{Binding RelativeSource={RelativeSource TemplatedParent} ...}" .../>

Nilai XAML

Istilah Deskripsi
{RelativeSource Self} Menghasilkan nilai ModeMandiri. Elemen target harus digunakan sebagai sumber untuk pengikatan ini. Ini berguna untuk mengikat satu properti elemen ke properti lain pada elemen yang sama.
{RelativeSource TemplatedParent} Menghasilkan ControlTemplate yang diterapkan sebagai sumber untuk pengikatan ini. Ini berguna untuk menerapkan informasi runtime ke pengikatan di tingkat templat.

Keterangan

Pengikatan dapat mengatur Binding.RelativeSource baik sebagai atribut pada elemen objek Pengikatan atau sebagai komponen dalam ekstensi markup {Binding}. Inilah sebabnya mengapa dua sintaks XAML yang berbeda ditampilkan.

RelativeSource mirip dengan ekstensi markup {Binding}. Ini adalah ekstensi markup yang mampu mengembalikan instans itu sendiri, dan mendukung konstruksi berbasis string yang pada dasarnya meneruskan argumen ke konstruktor. Dalam hal ini, argumen yang diteruskan adalah nilai Mode .

Mode Mandiri berguna untuk mengikat satu properti elemen ke properti lain pada elemen yang sama, dan merupakan variasi pada pengikatan ElementName tetapi tidak memerlukan penamaan lalu merujuk sendiri elemen. Jika Anda mengikat satu properti elemen ke properti lain pada elemen yang sama, properti harus menggunakan jenis properti yang sama, atau Anda juga harus menggunakan Pengonversi pada pengikatan untuk mengonversi nilai. Misalnya, Anda dapat menggunakan Tinggi sebagai sumber untuk Lebar tanpa konversi, tetapi Anda memerlukan pengonversi untuk menggunakan IsEnabled sebagai sumber visibilitas.

Berikut adalah contoh. Persegi panjang ini menggunakan ekstensi markup {Binding} sehingga Tinggi dan Lebarnya selalu sama dan dirender sebagai persegi. Hanya Tinggi yang ditetapkan sebagai nilai tetap. Untuk Persegi panjang ini , DataContext defaultnya null, bukan ini. Jadi untuk menetapkan sumber konteks data menjadi objek itu sendiri (dan mengaktifkan pengikatan ke properti lainnya) kita menggunakan RelativeSource={RelativeSource Self} argumen dalam penggunaan ekstensi markup {Binding}.

<Rectangle
  Fill="Orange" Width="200"
  Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}"
/>

Penggunaan RelativeSource={RelativeSource Self} lain adalah sebagai cara untuk mengatur DataContext objek ke dirinya sendiri. Misalnya, Anda mungkin melihat teknik ini di beberapa contoh SDK di mana kelas Halaman telah diperluas dengan properti kustom yang sudah menyediakan model tampilan siap pakai untuk pengikatan datanya sendiri seperti: <common:LayoutAwarePage ... DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}">

Catatan Penggunaan XAML untuk RelativeSource hanya menunjukkan penggunaan yang dimaksudkannya: mengatur nilai untuk Binding.RelativeSource di XAML sebagai bagian dari ekspresi pengikatan. Secara teoritis, penggunaan lain dimungkinkan jika mengatur properti di mana nilainya adalah RelativeSource.