Apa perbedaan antara 2 binding ini:
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="{TemplateBinding Property=Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
dan
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
?
wpf
relativesource
templatebinding
PaN1C_Showt1Me
sumber
sumber
Jawaban:
TemplateBinding bukan hal yang sama. Dokumen MSDN sering ditulis oleh orang-orang yang harus menanyai SDE bersuku kata satu tentang fitur perangkat lunak, sehingga nuansa tidak tepat.
TemplateBindings dievaluasi pada waktu kompilasi terhadap tipe yang ditentukan dalam template kontrol. Ini memungkinkan instantiasi template terkompilasi yang jauh lebih cepat. Hanya mencari-cari nama di templatebinding dan Anda akan melihat bahwa kompiler akan menandainya.
Markup yang mengikat diselesaikan pada saat runtime. Meskipun lebih lambat untuk dieksekusi, pengikatan akan menyelesaikan nama properti yang tidak terlihat pada jenis yang dinyatakan oleh templat. Dengan lebih lambat, saya akan menunjukkan bahwa jenisnya relatif karena operasi pengikatan mengambil sangat sedikit cpu aplikasi. Jika Anda meledakkan templat kontrol sekitar dengan kecepatan tinggi, Anda mungkin akan melihatnya.
Sebagai praktik, gunakan Bilah Template saat Anda bisa tetapi jangan takut pada Binding.
sumber
TemplateBinding - Lebih membatasi daripada menggunakan Binding biasa
Binding Reguler - Tidak memiliki batasan TemplateBinding di atas
sumber
Satu hal lagi - TemplateBindings tidak memungkinkan konversi nilai. Mereka tidak memungkinkan Anda untuk melewati Konverter dan tidak secara otomatis mengkonversi int ke string misalnya (yang normal untuk Binding).
sumber
TemplateBinding adalah singkatan untuk Mengikat dengan TemplatedParent tetapi tidak mengekspos semua kemampuan kelas Binding, misalnya Anda tidak dapat mengontrol Binding.Mode dari TemplateBinding.
sumber
Saya pikir TemplateBinding tidak mendukung tipe Freezable (yang termasuk objek kuas). Untuk mengatasi masalah tersebut. Satu dapat menggunakan TemplatedParent
sumber
Mereka digunakan dengan cara yang serupa tetapi mereka memiliki beberapa perbedaan. Berikut ini tautan ke dokumentasi TemplateBinding: http://msdn.microsoft.com/en-us/library/ms742882.aspx
sumber