Ekstensi markup {TemplateBinding}

Menautkan nilai properti dalam templat kontrol ke nilai beberapa properti lain yang diekspos pada kontrol templat. TemplateBinding hanya dapat digunakan dalam definisi ControlTemplate di XAML.

Penggunaan atribut XAML

<object propertyName="{TemplateBinding sourceProperty}" .../>

Penggunaan atribut XAML (untuk properti Setter dalam templat atau gaya)

<Setter Property="propertyName" Value="{TemplateBinding sourceProperty}" .../>

Nilai XAML

Istilah Deskripsi
propertyName Nama properti yang diatur dalam sintaks setter. Ini harus menjadi properti dependensi.
sourceProperty Nama properti dependensi lain yang ada pada jenis yang sedang di-template.

Keterangan

Menggunakan TemplateBinding adalah bagian mendasar dari cara Anda menentukan templat kontrol, baik jika Anda adalah pembuat kontrol kustom atau jika Anda mengganti templat kontrol untuk kontrol yang ada. Untuk informasi selengkapnya, lihat Mulai Cepat: Mengontrol templat.

Cukup umum bagi propertyName dan targetProperty untuk menggunakan nama properti yang sama. Dalam hal ini, kontrol mungkin menentukan properti itu sendiri dan meneruskan properti ke properti yang ada dan bernama secara intuitif dari salah satu bagian komponennya. Misalnya, kontrol yang menggabungkan TextBlock dalam kompositnya, yang digunakan untuk menampilkan properti Teks kontrol sendiri, mungkin menyertakan XAML ini sebagai bagian dalam templat kontrol: <TextBlock Text="{TemplateBinding Text}" .... />

Jenis yang digunakan sebagai nilai untuk properti sumber dan properti target harus cocok. Tidak ada kesempatan untuk memperkenalkan pengonversi saat Anda menggunakan TemplateBinding. Gagal mencocokkan nilai menghasilkan kesalahan saat mengurai XAML. Jika Anda memerlukan pengonversi, Anda dapat menggunakan sintaks verbose untuk pengikatan templat seperti: {Binding RelativeSource={RelativeSource TemplatedParent}, Converter="..." ...}

Mencoba menggunakan TemplateBinding di luar definisi ControlTemplate di XAML akan mengakibatkan kesalahan pengurai.

Anda dapat menggunakan TemplateBinding untuk kasus di mana nilai induk templat juga ditangguhkan sebagai pengikatan lain. Evaluasi untuk TemplateBinding dapat menunggu hingga pengikatan runtime yang diperlukan memiliki nilai.

TemplateBinding selalu merupakan pengikatan satu arah. Kedua properti yang terlibat harus properti dependensi.

TemplateBinding adalah ekstensi markup. Ekstensi markup biasanya diimplementasikan ketika ada persyaratan untuk menghindari nilai atribut 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 .

Catatan Dalam implementasi prosesor XAML Windows Runtime, tidak ada representasi kelas dukungan untuk TemplateBinding. TemplateBinding secara eksklusif untuk digunakan dalam markup XAML. Tidak ada cara mudah untuk mereprodusi perilaku dalam kode.

x:Ikat di ControlTemplate

Catatan

Menggunakan x:Bind dalam ControlTemplate memerlukan Windows 10, versi 1809 (SDK 17763) atau yang lebih baru. Untuk informasi selengkapnya tentang versi target, lihat Kode adaptif versi.

Dimulai dengan Windows 10, versi 1809, Anda dapat menggunakan ekstensi markup x:Bind di mana saja Anda menggunakan TemplateBinding dalam ControlTemplate.

Properti TargetType diperlukan (tidak opsional) pada ControlTemplate saat menggunakan x:Bind.

Dengan dukungan x:Bind , Anda dapat menggunakan pengikatan Fungsi serta pengikatan dua arah dalam ControlTemplate.

Dalam contoh ini, properti TextBlock.Text mengevaluasi ke Button.Content.ToString. TargetType pada ControlTemplate bertindak sebagai sumber data dan menyelesaikan hasil yang sama dengan TemplateBinding ke induk.

<ControlTemplate TargetType="Button">
    <Grid>
        <TextBlock Text="{x:Bind Content, Mode=OneWay}"/>
    </Grid>
</ControlTemplate>