Aracılığıyla paylaş


PropertyPath XAML Sözdizimi

PropertyPath 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 destekler. Bu konu, PropertyPath söz diziminin bağlama ve animasyon söz dizimlerine uygulandığı şekliyle belgelenmesini içerir.

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 .

Setter.Property gibi bazı stil ve şablon özellikleri, yüzeysel olarak PropertyPath benzer bir nitelenmiş özellik adı alır. Ancak bu, gerçek PropertyPath değildir; bunun yerine, owner.property dizesi biçimi kullanımı, WPF XAML işlemcisi ve DependencyProperty için tür dönüştürücü ile birlikte etkinleştirilmiştir.

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 ortak dil çalışma zamanı (CLR) nesnelerinden ve bunların özelliklerinden bağlama kaynakları elde etmek için ObjectDataProvider için kullanılır.

XML'ye veri bağlamanın PropertyPath kullanmadığını unutmayın, çünkü Binding içinde Path kullanmaz. Bunun yerine, XPath kullanır ve verilerin XML Belge Nesne Modeli'ne (DOM) geçerli XPath söz dizimini 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ğlantı hedefinin türüne otomatik olarak eşleştirir, bu da bir kapsayıcının bir öğe dizisiyle doldurulması gibi davranışlar oluşturur.

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

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

propertyName, DataContext geçerli Path için bir kullanımda yer alan bir özelliğin adını tanımlamalıdır. 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, TextBox metinle 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, belirli bir özelliğe <Binding Path="[key].propertyName" .../> gibi bir söz dizimi aracılığıyla 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 Yöntemi)

<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, propertyName'nin değeri olan türdeki bir özelliktir.

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

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

Parantezler, bu özelliğin bir PropertyPath içinde kısmi niteleme kullanılarak oluşturulması gerektiğini belirtir. Uygun eşlemeye sahip türü bulmak için bir XML ad alanı kullanabilir. ownerType her derlemede yapılan XmlnsDefinitionAttribute bildirimleri aracılığıyla, bir XAML işlemcisinin erişebildiği türleri arar. Çoğu uygulamanın varsayılan XML ad alanı, http://schemas.microsoft.com/winfx/2006/xaml/presentation biçiminde ad alanına eşlenmiştir, bu nedenle ön ek, genellikle yalnızca bu ad alanının dışındaki özel türler veya diğer 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.

  • Özellik, iliştirilmiş bir özelliktir.

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

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

Kaynak Geçişi (Koleksiyon Hiyerarşilerine Bağlanma)

<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. Kaynağın taranması, geçerli kayıt işaretçisi konumunu, verilerin görünümünün kullanıcı arabirimiyle senkronize edilmesiyle belirler. 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 Ana-Ayrıntı Desenini Hiyerarşik Verilerle Kullanma veya Veri Bağlamaya Genel Bakış.

Uyarı

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ümleri veya ana-detay veri bağlama senaryoları için geçerli kayıt işaretçisine başvurmak için yol dizesini eğik çizgi (/) ile başlatın. Ön eğik çizgiden sonraki herhangi bir yol, geçerli kayıt işaretçisinden itibaren geçilir.

Birden Çok Dizin Oluşturucu

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

veya

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

Belirli bir nesne birden çok dizin oluşturucu destekliyorsa, bu dizin oluşturucular, dizi başvuru sözdizimine benzer şekilde 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. Dizinleyicileri 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, piksel kılavuz dizisi içeren bir ColorGrid özelliğinde, belirli bir x,y'deki renge 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 ([ ]), caret karakteri (^) sonraki karakteri 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çış karakteri' olarak kullanılır.

    • 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.

Uyarı

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 Freezable veya ilkel bir tür alan bir 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 tür 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 animasyonunu kopyalamayı desteklemek için, TargetName tarafından belirtilen nesnenin ya bir FrameworkElement ya da FrameworkContentElement sınıfından türetilmiş bir 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 Freezable tür üzerinde var olan ilkel bir özellik TargetName 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 propertyNamePropertyTypeolarak bulunmalıdır.

Uygulanan stiller ve şablonlar nedeniyle animasyonların dolaylı olarak hedeflenmesi gerekir. Bir animasyonu hedeflemek için hedef nesne üzerinde bir TargetName'ya ihtiyacınız vardır ve bu ad x:Name veya Name tarafından belirlenir. Ş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, bir Panel özelliği, tema şablonundan gelen eksiksiz bir Brush (aslında bir SolidColorBrush) şeklindedir. Brush tamamen animasyon yapmak için bir BrushAnimation (büyük olasılıkla her Brush türü için bir tane) 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. SolidColorBrush konumundan Color konumuna geçmeli ve orada bir ColorAnimation uygulamalısınız. Bu örnek için özellik yolu Background.Color.

İliştirilmiş Özellikler

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

Parantezler, PropertyPath içindeki bu özelliğin kısmi nitelendirme kullanılarak oluşturulması gerektiğini belirtir. Türü bulmak için bir XML ad alanı kullanabilir. Her derlemedeki ownerType bildirimleri aracılığıyla bir XAML işlemcisinin erişebildiği XmlnsDefinitionAttribute türlerini arar. Çoğu uygulamada varsayılan XML ad alanı, http://schemas.microsoft.com/winfx/2006/xaml/presentation ad alanıyla eşleştirilmiştir, bu nedenle ön ek genellikle sadece bu ad alanı dışındaki özel türler veya diğer 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.)

Dizinleyiciler

<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. Verilen söz diziminde, bu propertyName2 şeklindedir. Örneğin, TransformGroup gibi bir koleksiyon, ara özellikse ve RenderTransform.Children[1].Angle gibi bir özellik yolunda bulunuyorsa, dizin oluşturucu kullanımı gerekebilir.

Kod İçinde Özellik Yolu

Kod kullanımı ve PropertyPath oluşturulması, PropertyPath başvuru konusu içinde belgelenmiş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. Nesne bir dize olduğunda, kullanımları bağlarken PropertyPath(Object) imzasını kullanın. PropertyPath(Object) imzasını, nesnenin bir DependencyProperty olduğu tek adımlı animasyon yolları için 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 bakınız