RelativeSource MarkupExtension

Bağlama biçimlendirme uzantısı içinde veya XAML'de oluşturulan bir RelativeSourceBinding öğenin özelliğini ayarlarken RelativeSource kullanılacak bağlama kaynağının özelliklerini belirtir.

XAML Öznitelik Kullanımı

<Binding RelativeSource="{RelativeSource modeEnumValue}" ... />

XAML Öznitelik Kullanımı (Bağlama uzantıları içinde iç içe geçmiş)

<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" ... />

XAML Nesne Öğesi Kullanımı

<Binding>
  <Binding.RelativeSource>
    <RelativeSource Mode="modeEnumValue"/>
  </Binding.RelativeSource>
</Binding>

-veya-

<Binding>
  <Binding.RelativeSource>
    <RelativeSource
      Mode="FindAncestor"
      AncestorType="{x:Type typeName}"
      AncestorLevel="intLevel"
    />
  </Binding.RelativeSource>
</Binding>

XAML Değerleri

Değer Tanım
modeEnumValue Aşağıdakilerden biri:

- Dize belirteci Self; özelliği olarak ayarlanmış olarak oluşturulmuş Mode bir RelativeSource öğesine Selfkarşılık gelir.
- Dize belirteci TemplatedParent; özelliği olarak ayarlanmış olarak oluşturulmuş Mode bir RelativeSource öğesine TemplatedParentkarşılık gelir.
- Dize belirteci PreviousData; özelliği olarak ayarlanmış olarak oluşturulmuş Mode bir RelativeSource öğesine PreviousDatakarşılık gelir.
- Mod hakkında FindAncestor bilgi için aşağıya bakın.
FindAncestor Dize belirteci FindAncestor. Bu belirteci kullanmak, bir RelativeSource üst tür ve isteğe bağlı olarak bir üst düzey belirten bir moda girer. Bu, özelliği olarak ayarlanmış olarak oluşturulmuş Mode bir RelativeSource öğesine FindAncestorkarşılık gelir.
typeName Mod için FindAncestor gereklidir. Özelliği dolduran bir türün AncestorType adı.
intLevel Mod için FindAncestor isteğe bağlı. Öncül düzeyi (Mantıksal ağaçta üst yön doğrultusunda değerlendirilen.)

Açıklamalar

{RelativeSource TemplatedParent} bağlama kullanımları, bir denetimin kullanıcı arabiriminin ve denetimin mantığının ayrılmasıyla ilgili daha büyük bir kavramı ele alan önemli bir tekniktir. Bu, şablon tanımı içinden şablonlu üst öğeye (şablonun uygulandığı çalışma zamanı nesnesi örneği) bağlanmaya olanak verir. Bu durumda, TemplateBinding İşaretleme Uzantısı aslında şu bağlama ifadesi için bir kısaltmadır: {Binding RelativeSource={RelativeSource TemplatedParent}}. TemplateBinding veya {RelativeSource TemplatedParent} kullanımların her ikisi de yalnızca şablonu tanımlayan XAML içinde ilgilidir. Daha fazla bilgi için bkz . TemplateBinding biçimlendirme uzantısı.

{RelativeSource FindAncestor} , denetimin her zaman belirli bir üst türdeki görsel ağaçta olması beklenen durumlar için denetim şablonlarında veya öngörülebilir kendi kendine kullanıcı arabirimi bileşimlerinde kullanılır. Örneğin, bir öğe denetiminin öğeleri, öğe denetimi üst üst öğesinin özelliklerine bağlanmak için kullanımları kullanabilir FindAncestor . Veya bir şablondaki denetim bileşiminin parçası olan öğeler, aynı oluşturma yapısındaki üst öğelere yönelik bağlamaları kullanabilir FindAncestor .

XAML Söz Dizimi bölümlerinde gösterilen mod için FindAncestor nesne öğesi söz diziminde, ikinci nesne öğesi söz dizimi özel olarak mod için FindAncestor kullanılır. FindAncestor modu bir AncestorType değer gerektirir. Aranacak ata türüne x:Type biçimlendirme uzantısı başvurusu kullanarak öznitelik olarak ayarlamanız AncestorType gerekir. AncestorType Değer, bağlama isteği çalışma zamanında işlendiğinde kullanılır.

modu için FindAncestor isteğe bağlı özelliği AncestorLevel , öğe ağacında var olan bu türde birden fazla atatörün bulunduğu durumlarda, ata aramasını kesinleştirmeye yardımcı olabilir.

Modu kullanma FindAncestor hakkında daha fazla bilgi için bkz RelativeSource. .

{RelativeSource Self} bir örneğin bir özelliğinin aynı örneğin başka bir özelliğinin değerine bağımlı olması gerektiği ve bu iki özellik arasında genel bağımlılık özelliği ilişkisinin (zorlama gibi) zaten mevcut olmadığı senaryolar için kullanışlıdır. Bir nesnede, değerlerin tam anlamıyla aynı olması (ve aynı şekilde yazılması) gibi iki özelliğin bulunması nadir olsa da, değerine sahip {RelativeSource Self}bir Converter bağlamaya parametre uygulayabilir ve kaynak ve hedef türler arasında dönüştürmek için dönüştürücüsü kullanabilirsiniz. için {RelativeSource Self} başka bir senaryo da bir MultiDataTriggeröğesinin bir parçası olmasıdır.

Örneğin, aşağıdaki XAML için hangi değer girilirse girilirse girsin WidthRectangle her zaman kare olacak şekilde bir Rectangle öğe tanımlar:<Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>

{RelativeSource PreviousData} veri şablonlarında veya bağlamaların veri kaynağı olarak bir koleksiyon kullandığı durumlarda kullanışlıdır. Koleksiyondaki bitişik veri öğeleri arasındaki ilişkileri vurgulamak için kullanabilirsiniz {RelativeSource PreviousData} . İlgili bir teknik, veri kaynağındaki geçerli ve önceki öğeler arasında bir MultiBinding oluşturmak ve iki öğe ile özellikleri arasındaki farkı belirlemek için bu bağlamada bir dönüştürücü kullanmaktır.

Aşağıdaki örnekte, öğeler şablonundaki ilk TextBlock öğe geçerli sayıyı görüntüler. İkinci TextBlock bağlama, nominal olarak iki Binding bileşene sahip olan bir MultiBinding bağlamadır: geçerli kayıt ve kullanarak {RelativeSource PreviousData}önceki veri kaydını kasıtlı olarak kullanan bir bağlama. Ardından, üzerindeki MultiBinding bir dönüştürücü farkı hesaplar ve bağlamaya döndürür.

<ListBox Name="fibolist">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding}"/>
            <TextBlock>, difference = </TextBlock>
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding Converter="{StaticResource DiffConverter}">
                            <Binding/>
                            <Binding RelativeSource="{RelativeSource PreviousData}"/>
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Veri bağlamayı kavram olarak açıklama burada ele alınmamıştır. Bkz . Veri Bağlamaya Genel Bakış.

WPF XAML işlemci uygulamasında, bu işaretleme uzantısı için işleme sınıfı tarafından RelativeSource tanımlanır.

RelativeSource bir işaretleme uzantısıdır. Biçimlendirme uzantıları, genellikle öznitelik değerlerinin değişmez değerler veya işleyici isimleri dışına çıkma gereksinimi olduğunda ve bu gereksinim, belirli türler veya özellikler üzerine tür dönüştürücülerini koymaktan daha genel olduğunda uygulanır. XAML'deki tüm işaretleme uzantıları öznitelik söz diziminde ve } karakterlerini kullanır{. Bu, bir XAML işlemcisinin işaretleme uzantısının özniteliği işlemesi gerektiğini tanıdığı kuraldır. Daha fazla bilgi için bkz . biçimlendirme uzantıları ve WPF XAML.

Ayrıca bkz.