RelativeSource MarkupExtension
Bağlama İşaretleme Uzantısı RelativeSource içinde veya XAML'de kurulan bir öğenin özelliğini ayarlarken kullanılacak bağlama RelativeSourceRelativeSourceBinding 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
modeEnumValue |
Aşağıdakilerden biri: - Dize Self belirteci ; özelliği olarak RelativeSource ayarlanmış şekilde oluşturulan bir Mode değerine karşılık gelen Self .- Dize TemplatedParent belirteci ; özelliği olarak RelativeSource ayarlanmış şekilde oluşturulan bir Mode değerine karşılık gelen TemplatedParent .- Dize PreviousData belirteci ; özelliği olarak RelativeSource ayarlanmış şekilde oluşturulan bir Mode değerine karşılık gelen PreviousData .- Mod hakkında bilgi için aşağıya FindAncestor bakın. |
FindAncestor |
Dize FindAncestor belirteci. Bu belirteci kullanmak, bir üst türü ve isteğe bağlı olarak üst düzeyi RelativeSource belirten bir moda girer. Bu, özelliği olarak RelativeSource ayarlanmış şekilde oluşturulan bir Mode değerine karşılık FindAncestor geldi. |
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 temel 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 Biçimlendirme Uzantısı aslında şu bağlama ifadesinin bir kısa adıdır: . TemplateBinding veya {RelativeSource TemplatedParent} kullanımları yalnızca bir şablon tanımlayan XAML içinde alakalıdır. Daha fazla bilgi için bkz. TemplateBinding İşaretleme Uzantısı.
{RelativeSource FindAncestor} genellikle denetimin her zaman belirli bir üst tür görsel ağacında olması beklenen durumlar için denetim şablonlarında veya öngörülebilir kendi içinde ui bileşimlerinde kullanılır. Örneğin, bir öğe denetimi öğeleri, öğelerinin FindAncestor üst öğelerinin özelliklerine bağlamak için kullanımları kullanabilir. Veya bir şablonda denetim bileşiminin parçası olan öğeler, aynı bileşim FindAncestor yapısında üst öğelere bağlamaları kullanabilir.
XAML Söz Dizimi bölümlerinde gösterilen modun nesne FindAncestor öğesi söz dizimsinde, ikinci nesne öğesi söz dizimi özellikle mod için FindAncestor kullanılır. FindAncestor modu bir değer AncestorType gerektirir. Arama yapmak için AncestorType üst türe AncestorType başvurusu kullanarak öznitelik olarak ayarlamalısınız. Bağlama AncestorType isteği çalışma zamanında işlendiğinde değer kullanılır.
Mod için isteğe bağlı özellik, öğe ağacında mevcut olan bu türün muhtemelen birden fazla üst öğesi olduğu durumlarda üst aramanın karartıcı hale karartıcı FindAncestorAncestorLevel yardımcı olabilir.
Modu kullanma hakkında daha fazla bilgi için FindAncestor bkz. RelativeSource .
{RelativeSource Self} , bir örneğin bir özelliğinin aynı örneğin başka bir özelliğinin değerine bağlı olması gerektiği ve bu iki özellik arasında genel bağımlılık özelliği ilişkisi (zorlama gibi) mevcut olmadığının senaryolar için yararlıdır. Bir nesnede, değerlerin tam olarak aynı (ve aynı şekilde yazarak) olması gibi iki özelliğin mevcut olması nadir de olsa, sahip bağlamaya bir parametre uygulayabilir ve kaynak ve hedef türleri arasında dönüştürme yapmak için dönüştürücüyü Converter{RelativeSource Self} kullanabilirsiniz. için bir diğer {RelativeSource Self} senaryo da bir parçası olarakdır. MultiDataTrigger
Örneğin, aşağıdaki XAML için girilen değer ne olursa olsun her zaman bir kare olacak RectangleWidth şekilde bir öğesi Rectangle 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 kullanma durumlarında yararlıdır. Koleksiyondaki {RelativeSource PreviousData} bitişik veri öğeleri arasındaki ilişkileri vurgulamak için kullanabilirsiniz. İlgili bir teknik, veri kaynağındaki geçerli ve önceki öğeler arasında bir kurmak ve bu bağlamada iki öğe ile özellikleri arasındaki farkı belirlemek için bir dönüştürücü MultiBinding kullanmaktır.
Aşağıdaki örnekte, items TextBlock şablonundaki ilk öğe geçerli s numarayı görüntüler. İkinci bağlama, nominal olarak iki bağlılığa sahip olan bir bağlamadır: geçerli kayıt ve kullanarak önceki veri kaydını kasıtlı TextBlockMultiBinding olarak kullanan bir Binding{RelativeSource PreviousData} bağlama. Ardından, üzerinde bir dönüştürücü MultiBinding 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çıklamanın kapsamına buradan bakabilirsiniz. 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 dizimlerinde ve karakterlerini kullanır. Bu kural, bir XAML işlemcisinin işaretleme uzantısının özniteliği {} işlemesi gerektiğini tanıması kuralıdır. Daha fazla bilgi için bkz. İşaretleme Uzantıları ve WPF XAML.