Şablon bağlama ve bağlama nedir?


118

Anlayamadım BorderThickness="{TemplateBinding BorderThickness}. İşte kod:

<ControlTemplate TargetType="{x:Type wpftoolkit:DataGridCell}">
    <Border Padding="{TemplateBinding Padding}" 
            BorderBrush="{TemplateBinding BorderBrush}" 
            BorderThickness="{TemplateBinding BorderThickness}" 
            Background="{TemplateBinding Background}" 
            SnapsToDevicePixels="True">
        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    </Border>
</ControlTemplate>

Ayrıca lütfen diğer bağlama türlerini açıklayın.


neden bu dönüş ve BorderThickness neden iki kez "" "BorderThickness =" {TemplateBinding BorderThickness} "" "
prjndhi

1
@Euphoric bu sayfa, bu sorgu için ilk google sonucu gibi görünüyor. ;)
2014

Yanıtlar:


204

TemplateBinding, şablon tanımındaki öğe özelliklerine bağlanmak için kullanılır. Örneğinizde yazabilirdiniz

 <Border Padding="{Binding Padding}" ...>

sınırın padding özelliğini padding özelliğine bağlamak anlamında ... ne? "Bu şablonun kullanıldığı denetimin padding özelliği" demek istersiniz. Ona bir isim veremezsiniz çünkü şu anda kontrolün x: Adını bilmiyorsunuz (bilseniz bile, çalışmayacaktır çünkü farklı bir ad kapsamındadır). Ancak, bunu göreceli bir kaynak tanımlayarak yapabilirsiniz

<Border Padding="{Binding Padding, RelativeSource={RelativeSource TemplatedParent}" ...>

veya yukarıdaki kısayol (*) olan TemplateBinding'i kullanın

<Border Padding="{TemplateBinding Padding}" ...>

(*) Bu şablon oluşturma senaryolarında daha az ayrıntılı olmasının yanı sıra, TemplateBinding'in normal bir bağlamayla karşılaştırıldığında birkaç farkı vardır:

  • Derleme zamanında değerlendirilir. (Örneğin, Padding özelliği yoksa, bir derleme hatası alırsınız. Ancak TemplatedParent ile bir bağlama kullanırsanız, hatayı yalnızca çalışma zamanında görürsünüz.)
  • Her zaman tek yönlü bir bağlayıcıdır.
  • Hem kaynak hem de hedef özelliklerin bağımlılık özellikleri olmasını gerektirir .
  • Çok daha az işlevselliğe sahiptir (StringFormat, Delay, IsAsync, vb. Yok. Binding vs TemplateBindingExtention özelliklerine bakın ).

59

Bir resim bin kelime değerinde bir olup. Bu durumda 7 dakikalık video: https://www.youtube.com/watch?v=z-0TZR-7xLI

EDIT: Örnek:

  • A'nın Buttonbir varsayılan ControlTemplateözelliği ve Heightözelliği vardır
  • A'nın ControlTemplateözelliğini Buttonkendiniz yazarak geçersiz Ellipsekılarsınız (örneğin , Rectangle-looking yerine-görünümlü bir düğme yapmak istersiniz )
  • Bir yaptıktan sonra Ellipseyeni yayın ControlTemplate, istediğiniz Ellipseorijinal Button'un aynı boyutta olmasını Heightmülkiyet
  • Yani TemplateBinding, Button' Heightlere isim vermeden ' ' referans vermek için kullanırsınızgörüntü açıklamasını buraya girin

Bu teorik olarak soruya cevap görülebilir fakat tercih edildiğini burada cevabın temel parçalarını kapsadığı ve başvuru için bağlantı sağlar.
Bhargav Rao

32

Eren Ersönmenz bunu çok güzel anlattı ama kavramı daha iyi anlamak için ona başka bir bakış açısı vermek istiyorum.

WPF'de her denetim, sunumundan aşağı yukarı ayrılır. Her zaman kontrol şablonunu değiştirebilir ve tamamen farklı görünmesini sağlayabilirsiniz. Bir düğme beklendiği gibi çalışır ve ControlTemplateyalnızca bir Rectangleörnekten oluşur. Şimdi bazen ControlTemplate, bir kontrolün mantık bölümünün özelliklerini gerçekten kullanmak için gereklidir . Ve bunun TemplateBindingiçin sadece ControlTemplate"Görsel sunum yaptığımız kontrolün bu özelliğini kullan" diyor. İyi bir örnek, Backgroundher kontroldeki özelliktir, kendi başına bir anlamı yoktur, onun anlamını TemplateBindingçocuk kontrolüne alır .ControlTemplate .

Kendi başına bağlama MSDN'de çok iyi anlatılmıştır . Bu çok hoş bir kopya kağıdı, aslında hemen yanımda duvarımda asılı. Mevcut tüm farklı bağlamalara iyi bir genel bakış sağlar.


6

Gönderen TemplateBinding Biçimlendirme Uzantısı ,TemplateBinding templated kumanda üzerindeki diğer bazı açıkta özelliğinin değerine bir kontrol şablonunda bir özelliğin değerini bağlar. Diğer bir deyişle, bir şablondaki değerleri bağlamak içindir.

Bağlama , bağlama hedeflerinin ve veri kaynaklarının bir özelliğini bağlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.