PropertyPath XAML Sözdizimi

nesnesi, PropertyPath türü değerleri olarak alan çeşitli özellikleri ayarlamak için karmaşık bir satır içi XAML söz dizimini PropertyPath destekler. Bu konuda, bağlama ve animasyon söz dizimlerine uygulanan söz dizimi belgelenir PropertyPath .

PropertyPath'in Kullanıldığı Yer

PropertyPath , çeşitli Windows Presentation Foundation (WPF) özelliklerinde kullanılan yaygın bir nesnedir. Özellik yolu bilgilerini iletmek için ortak PropertyPath kullanılmasına rağmen, tür olarak kullanılan her özellik alanı PropertyPath için kullanımlar farklılık gösterir. Bu nedenle söz dizimlerini özellik bazında belgeleyemek daha pratiktir.

WPF öncelikle bir nesne veri kaynağının özellikleri arasında geçiş yapmak için nesne modeli yollarını açıklamak ve hedeflenen animasyonlar için hedef yolu açıklamak için kullanır PropertyPath .

gibi Setter.Property bazı stil ve şablon özellikleri, yüzeysel olarak bir öğesine benzeyen nitelenmiş bir PropertyPathözellik adı alır. Ancak bu doğru PropertyPathdeğildir; bunun yerine WPF XAML işlemcisi tarafından için tür dönüştürücüsü DependencyPropertyile birlikte etkinleştirilen nitelikli bir owner.özellik dizesi biçimi kullanımıdır.

Veri Bağlamadaki Nesneler için PropertyPath

Veri bağlama, herhangi bir bağımlılık özelliğinin hedef değerine bağlanabileceğiniz bir WPF özelliğidir. Ancak, böyle bir veri bağlamasının kaynağı bir bağımlılık özelliği olması gerekmez; ilgili veri sağlayıcısı tarafından tanınan herhangi bir özellik türü olabilir. Özellik yolları özellikle ObjectDataProviderortak dil çalışma zamanı (CLR) nesnelerinden ve bunların özelliklerinden bağlama kaynaklarını almak için kullanılan için kullanılır.

XML'ye veri bağlamanın içinde kullanmadığı PropertyPathPath Bindingiçin kullanmadığını unutmayın. Bunun yerine, verilerin XML Belge Nesne Modeli'ne (DOM) geçerli XPath söz dizimini kullanır XPath ve belirtirsiniz. XPath dize olarak da belirtilir, ancak burada belgelenmez; Bkz . XMLDataProvider ve XPath Sorguları Kullanarak XML Verilerine Bağlama.

Veri bağlamadaki özellik yollarını anlamanın bir anahtarı, bağlamayı tek bir özellik değerine hedefleyebileceğiniz veya bunun yerine listeleri veya koleksiyonları alan hedef özelliklere bağlanabilmenizdir. Koleksiyonları, örneğin koleksiyonda kaç veri öğesinin bulunduğuna bağlı olarak genişleyecek bir ListBox bağlaması kullanıyorsanız, özellik yolunuz tek tek koleksiyon öğelerine değil koleksiyon nesnesine başvurmalıdır. Veri bağlama altyapısı, veri kaynağı olarak kullanılan koleksiyonu bağlama hedefinin türüyle otomatik olarak eşleştirir ve bir öğe dizisiyle doldurma gibi davranışlara ListBox neden olur.

Veri Bağlamı Olarak Anlık Nesnede Tek Özellik

<Binding Path="propertyName" ... />

propertyName, kullanım için Path geçerli DataContext olan bir özelliğin adı olarak çözümlenmelidir. Bağlamanız kaynağı güncelleştirirse, bu özelliğin okunması/yazılması ve kaynak nesnenin değiştirilebilir olması gerekir.

Veri Bağlamı Olarak Anlık Nesnede Tek Dizin Oluşturucu

<Binding Path="[key]" ... />

key bir sözlüğe veya karma tabloya yazılan dizin ya da bir dizinin tamsayı dizini olmalıdır. Ayrıca anahtarın değeri, uygulandığı özelliğe doğrudan bağlanabilen bir tür olmalıdır. Örneğin, dize anahtarlarını ve dize değerlerini içeren bir karma tablo, için TextBoxText'e bağlanmak için bu şekilde kullanılabilir. Veya anahtar bir koleksiyonu veya alt dizini işaret ederse, hedef koleksiyon özelliğine bağlanmak için bu söz dizimini kullanabilirsiniz. Aksi takdirde, gibi <Binding Path="[key].propertyName" .../>bir söz dizimi aracılığıyla belirli bir özelliğe başvurmanız gerekir.

Gerekirse dizinin türünü belirtebilirsiniz. Dizine alınan özellik yolunun bu yönüyle ilgili ayrıntılar için bkz Binding.Path. .

Birden Çok Özellik (Dolaylı Özellik Hedefleme)

<Binding Path="propertyName.propertyName2" ... />

propertyName geçerli olan bir özelliğin DataContextadı olarak çözümlenmelidir. yol özellikleri propertyName ve propertyName2 bir ilişkide var olan herhangi bir özellik olabilir; burada propertyName2 türünde değeri propertyNameolan bir özelliktir.

Tek Özellik, Ekli veya Başka Türde Nitelenmiş

<object property="(ownerType.propertyName)" ... />

Parantezler, içindeki bu özelliğin kısmi niteleme PropertyPath kullanılarak oluşturulması gerektiğini belirtir. Uygun eşlemeye sahip türü bulmak için bir XML ad alanı kullanabilir. Her ownerType derlemedeki bildirimler aracılığıyla bir XAML işlemcisinin erişimi olan XmlnsDefinitionAttribute türleri arar. Çoğu uygulamanın ad alanıyla eşlenmiş http://schemas.microsoft.com/winfx/2006/xaml/presentation varsayılan XML ad alanı vardır, bu nedenle ön ek genellikle yalnızca bu ad alanının dışındaki özel türler veya türler için gereklidir. propertyName üzerinde var olan ownerTypebir özelliğin adı olarak çözümlenmelidir. Bu söz dizimi genellikle aşağıdaki durumlardan biri için kullanılır:

  • Yol, belirtilen Hedef Türü olmayan bir stilde veya şablonda bulunan XAML'de belirtilir. Nitelenmiş kullanım genellikle bunun dışındaki durumlar için geçerli değildir, çünkü stil olmayan, şablon dışı durumlarda özellik bir tür değil, bir örnekte bulunur.

  • özelliği ekli bir özelliktir.

  • Statik bir özelliğe bağlanıyorsunuz.

Görsel taslak hedefi olarak kullanmak için olarak propertyName belirtilen özelliğin bir DependencyPropertyolması gerekir.

Kaynak Geçişi (Koleksiyon hiyerarşilerine bağlama)

<object Path="propertyName/propertyNameX" ... />

Bu söz dizimindeki / hiyerarşik bir veri kaynağı nesnesi içinde gezinmek için kullanılır ve hiyerarşide ardışık / karakter içeren birden çok adım desteklenir. Geçerli kayıt işaretçisi konumu için kaynak çapraz geçiş hesapları, verilerin görünümünün kullanıcı arabirimiyle eşitlenmesiyle belirlenir. Hiyerarşik veri kaynağı nesneleriyle bağlamanın ayrıntıları ve veri bağlamada geçerli kayıt işaretçisi kavramı için bkz . Hiyerarşik Verilerle Ana Ayrıntı Desenini Kullanma veya Veri Bağlamaya Genel Bakış.

Not

Yüzeysel olarak, bu söz dizimi XPath'e benzer. XML veri kaynağına bağlama için gerçek bir XPath ifadesi değer olarak Path kullanılmaz ve bunun yerine birbirini dışlayan XPath özellik için kullanılmalıdır.

Koleksiyon Görünümleri

Adlandırılmış bir koleksiyon görünümüne başvurmak için koleksiyon görünümü adına karma karakteri () ön ekini ekleyin#.

Geçerli Kayıt İşaretçisi

Koleksiyon görünümü veya ana ayrıntı veri bağlama senaryosu için geçerli kayıt işaretçisine başvurmak için yol dizesini eğik çizgi (/ ) ile başlatın. Eğik çizgiyi geçen herhangi bir yol, geçerli kayıt işaretçisinden başlayarak geçirilir.

Birden Çok Dizin Oluşturucu

<object Path="[index1,index2...]" ... />

veya

<object Path="propertyName[index,index2...]" ... />

Belirli bir nesne birden çok dizin oluşturucu destekliyorsa, söz dizimine başvuran bir diziye benzer şekilde bu dizin oluşturucular sırasıyla belirtilebilir. Söz konusu nesne, geçerli bağlam veya birden çok dizin nesnesi içeren bir özelliğin değeri olabilir.

Varsayılan olarak, dizin oluşturucu değerleri temel alınan nesnenin özellikleri kullanılarak yazılır. Gerekirse dizinin türünü belirtebilirsiniz. Dizin oluşturucuları yazma hakkında ayrıntılı bilgi için bkz Binding.Path. .

Söz Dizimlerini Karıştırma

Yukarıda gösterilen söz dizimlerinin her biri birbirine eklenebilir. Örneğin, bir nesne piksel kılavuz dizisi içeren bir özelliğin belirli bir x,y ColorGrid rengine bir özellik yolu oluşturan bir örnek aşağıda verilmiştir SolidColorBrush :

<Rectangle Fill="{Binding ColorGrid[20,30].SolidColorBrushResult}" ... />

Özellik Yolu Dizeleri için Kaçışlar

Bazı iş nesneleri için, özellik yolu dizesinin doğru ayrıştırmak için bir kaçış dizisi gerektirdiği bir durumla karşılaşabilirsiniz. Bu karakterlerin çoğunda genellikle iş nesnesini tanımlamak için kullanılacak dillerde benzer adlandırma etkileşimi sorunları olduğundan kaçış gereksinimi nadir olmalıdır.

  • Dizin oluşturucuların içinde ([ ]), şapka işareti karakteri (^) sonraki karakterden kaçar.

  • XML dil tanımı için özel olan belirli karakterlerin kaçışını yapmalısınız (XML varlıklarını kullanarak). "&" karakterinden kaçmak için kullanın & . ">" bitiş etiketinden kaçmak için kullanın>.

  • İşaretleme uzantısını işlemek için WPF XAML ayrıştırıcı davranışına özel olan karakterlerden kaçış (ters eğik çizgi \kullanarak) gerekir.

    • Ters eğik çizgi (\), kaçış karakterinin kendisidir.

    • Eşittir işareti (=), özellik adını özellik değerinden ayırır.

    • Virgül (,) özellikleri ayırır.

    • Sağ küme ayracı (}), işaretleme uzantısının sonudur.

Not

Teknik olarak, bu kaçışlar görsel taslak özellik yolu için de çalışır, ancak genellikle mevcut WPF nesneleri için nesne modellerinde geçiş yaptığınız için kaçış gereksiz olmalıdır.

Animasyon Hedefleri için PropertyPath

Animasyonun hedef özelliği, bir veya ilkel tür alan bir Freezable bağımlılık özelliği olmalıdır. Ancak, bir türdeki hedeflenen özellik ve son animasyonlu özellik farklı nesnelerde bulunabilir. Animasyonlar için, özellik değerlerindeki nesne-özellik ilişkileri arasında geçiş yaparak adlandırılmış animasyon hedef nesnesinin özelliği ile hedeflenen hedef animasyon özelliği arasındaki bağlantıyı tanımlamak için bir özellik yolu kullanılır.

Animasyonlar için Genel Nesne-Özellik Konuları

Genel olarak animasyon kavramları hakkında daha fazla bilgi için bkz . Görsel Taslaklara Genel Bakış ve Animasyona Genel Bakış.

Değer türü veya animasyonlu özellik bir Freezable tür veya ilkel olmalıdır. Yolu başlatan özellik, belirtilen TargetName türde var olan bir bağımlılık özelliğinin adı olarak çözümlenmelidir.

Zaten donmuş olan bir Freezable animasyonu kopyalamayı desteklemek için tarafından belirtilen TargetName nesnenin veya FrameworkContentElement türetilmiş bir FrameworkElement sınıf olması gerekir.

Hedef Nesnedeki Tek Özellik

<animation Storyboard.TargetProperty="propertyName" ... />

propertyName belirtilen TargetName türde var olan bir bağımlılık özelliğinin adı olarak çözümlenmelidir.

Dolaylı Özellik Hedefleme

<animation Storyboard.TargetProperty="propertyName.propertyName2" ... />

propertyNamebir değer türü veya belirtilen TargetName tür üzerinde var olan ilkel bir özellik Freezable olmalıdır.

propertyName2 değeri olan nesnede var olan bir bağımlılık özelliğinin propertyNameadı olmalıdır. Başka bir deyişle, propertyName2 türünde bir bağımlılık özelliği propertyName PropertyTypeolarak bulunmalıdır.

Uygulanan stiller ve şablonlar nedeniyle animasyonların dolaylı olarak hedeflenmesi gerekir. Bir animasyonu hedeflemek için bir hedef nesneye ihtiyacınız vardır TargetName ve bu ad x:Name veya Nameile oluşturulur. Şablon ve stil öğelerinin adları da olsa, bu adlar yalnızca stil ve şablonun ad kapsamı içinde geçerlidir. (Şablonlar ve stiller ad kapsamlarını uygulama işaretlemesiyle paylaştıysa, adlar benzersiz olamaz. Stiller ve şablonlar örnekler arasında tam anlamıyla paylaşılır ve yinelenen adları kalıcı yapar.) Bu nedenle, animasyon eklemek isteyebileceğiniz bir öğenin tek tek özellikleri bir stil veya şablondan geliyorsa, stil şablonundan olmayan adlandırılmış bir öğe örneğiyle başlamanız ve animasyon eklemek istediğiniz özelliğe ulaşmak için stil veya şablon görsel ağacını hedeflemeniz gerekir.

Örneğin, Background bir Panel özelliğinin özelliği, tema şablonundan gelen eksiksiz Brush bir (aslında SolidColorBrushbir ) şeklindedir. Bire tamamen animasyon eklemek Brush için bir BrushAnimation (muhtemelen her Brush tür için bir tane) olması gerekir ve böyle bir tür yoktur. Fırçaya animasyon eklemek için, bunun yerine belirli Brush bir türün özelliklerine animasyon eklersiniz. Oraya bir uygulamak ColorAnimation için Color oradan SolidColorBrush adresine ulaşmalısınız. Bu örneğin özellik yolu olacaktır Background.Color.

İliştirilmiş Özellikler

<animation Storyboard.TargetProperty="(ownerType.propertyName)" ... />

Parantezler, içindeki bu özelliğin kısmi niteleme PropertyPath kullanılarak oluşturulması gerektiğini belirtir. Türü bulmak için bir XML ad alanı kullanabilir. Her ownerType derlemedeki bildirimler aracılığıyla bir XAML işlemcisinin erişimi olan XmlnsDefinitionAttribute türleri arar. Çoğu uygulamanın ad alanıyla eşlenmiş http://schemas.microsoft.com/winfx/2006/xaml/presentation varsayılan XML ad alanı vardır, bu nedenle ön ek genellikle yalnızca bu ad alanının dışındaki özel türler veya türler için gereklidir. propertyName üzerinde var olan ownerTypebir özelliğin adı olarak çözümlenmelidir. olarak propertyName belirtilen özellik bir DependencyPropertyolmalıdır. (Tüm WPF ekli özellikleri bağımlılık özellikleri olarak uygulanır, bu nedenle bu sorun yalnızca özel ekli özellikler için önemlidir.)

Dizin Oluşturucular

<animation Storyboard.TargetProperty="propertyName.propertyName2[index].propertyName3" ... />

Bağımlılık özelliklerinin veya Freezable türlerinin çoğu dizin oluşturucu desteklemez. Bu nedenle, animasyon yolundaki bir dizin oluşturucu için tek kullanım, adlandırılmış hedefte zinciri başlatan özellik ile son animasyonlu özellik arasında bir ara konumdadır. Sağlanan söz diziminde, yani propertyName2. Örneğin, ara özellik gibi RenderTransform.Children[1].Anglebir özellik yolunda gibi TransformGroupbir koleksiyonsa dizin oluşturucu kullanımı gerekebilir.

Kodda PropertyPath

için kod kullanımı PropertyPath, oluşturma PropertyPathda dahil olmak üzere için başvuru konusunda PropertyPathbelgelenmiştir.

Genel olarak, PropertyPath biri bağlama kullanımları ve en basit animasyon kullanımları, diğeri karmaşık animasyon kullanımları için olmak üzere iki farklı oluşturucu kullanmak üzere tasarlanmıştır. Nesnenin PropertyPath(Object) bir dize olduğu kullanımları bağlamak için imzayı kullanın. nesnenin PropertyPath(Object) olduğu DependencyPropertytek adımlı animasyon yolları için imzayı kullanın. Karmaşık animasyonlar için imzayı PropertyPath(String, Object[]) kullanın. Bu ikinci oluşturucu, bir özellik yolu ilişkisi tanımlamak için ilk parametre için bir belirteç dizesi ve belirteç dizesindeki konumları dolduran bir nesne dizisi kullanır.

Ayrıca bkz.