PropertyPath XAML Sözdizimi

PropertyPathNesnesi, PropertyPath türü değer 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 dizimini bağlama ve animasyon sözdizimleri için uygulanan olarak belgeler.

PropertyPath 'In kullanıldığı yer

PropertyPath, birkaç Windows Presentation Foundation (WPF) özelliklerinde kullanılan ortak bir nesnedir. PropertyPathÖzellik yolu bilgilerini iletmek için ortak kullanılmasına karşın, türü olarak kullanılan her bir özellik alanı için kullanımlar PropertyPath değişir. Bu nedenle, sözdizimleri özellik başına temelinde belge oluşturmak daha pratik hale gelir.

WPF öncelikle, PropertyPath nesne veri kaynağı özelliklerine geçiş yapmak ve hedeflenen animasyonlar için hedef yolu belirtmek üzere nesne modeli yollarını anlatmak için kullanır.

Gibi bazı stil ve Şablon Özellikleri, Setter.Property superficially benzer bir nitelenmiş Özellik adı alır PropertyPath . Ancak bu doğru değildir PropertyPath ; bunun yerine, için tür dönüştürücüsü ile bırlıkte WPF XAML işlemcisi tarafından etkinleştirilen bir nitelenmiş PropertyPath dizesi biçimi kullanımı DependencyProperty .

Veri bağlamada nesneler için PropertyPath

Veri bağlama, herhangi bir bağımlılık özelliğinin hedef değerini bağlayabileceğiniz bir WPF özelliğidir. Ancak, bu tür bir veri bağlamasının kaynağı bir bağımlılık özelliği olmalıdır; Bu, geçerli veri sağlayıcısı tarafından tanınan herhangi bir özellik türü olabilir. Özellik yolları özellikle, ObjectDataProvider ortak dil çalışma zamanı (CLR) nesnelerinden ve bunların özelliklerinden bağlama kaynakları almak için kullanılan için kullanılır.

XML 'e veri bağlamanın PropertyPath , içinde kullanmadığı için kullanmaz PathBinding . Bunun yerine, XPath VERILERIN XML belge nesne modeli (DOM) için geçerli XPath sözdizimini kullanır ve belirtirsiniz. XPath aynı zamanda bir dize olarak belirtilir, ancak burada açıklanmamıştır; bkz. XPath.

Veri bağlamada Özellik yollarını anlamak için bir anahtar, bağlamayı tek bir özellik değerine hedefleyebilir veya bunun yerine listeleri veya koleksiyonları alan hedef özelliklere bağlayabilirsiniz. Koleksiyonları bağlıyorsanız, ListBox koleksiyonda kaç veri öğesi olduğuna bağlı olarak genişlendirilecektir ve sonra, özellik yolunuzda tek tek koleksiyon öğeleri değil koleksiyon nesnesine başvuru yapılmalıdır. Veri bağlama altyapısı, veri kaynağı olarak kullanılan koleksiyonla otomatik olarak bağlama hedefi türüne eşleşir ve bir ListBox öğe dizisi ile birlikte doldurma gibi davranışa neden olur.

Veri bağlamı olarak acil nesnedeki tek özellik

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

PropertyName , kullanım için geçerli olan bir özelliğin adı olacak şekilde çözümlenmelidir Path . Bağlamanız kaynağı Güncelleştir, bu özellik okuma/yazma olmalıdır ve kaynak nesne değişebilir olmalıdır.

Veri bağlamı olarak acil nesnedeki tek Dizin Oluşturucu

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

key bir sözlüğe ya da karma tabloya veya bir dizinin tamsayı dizinine yazılan dizin olmalıdır. Ayrıca, anahtarın değeri, uygulandığı özelliği doğrudan bağlanabilir bir tür olmalıdır. Örneğin, dize anahtarlarını ve dize değerlerini içeren bir karma tablo, bir için metne bağlamak üzere bu şekilde kullanılabilir TextBox . Ya da anahtar bir koleksiyona veya alt dizine işaret ediyorsa, bu söz dizimini bir hedef koleksiyon özelliğine bağlamak için kullanabilirsiniz. Aksi takdirde, gibi bir sözdizimi aracılığıyla belirli bir özelliğe başvurmanız gerekir <Binding Path="[key].propertyName" .../> .

Gerekirse dizinin türünü belirtebilirsiniz. Dizinli özellik yolunun bu yönü hakkında ayrıntılı bilgi için bkz Binding.Path ..

Birden çok Özellik (dolaylı Özellik hedefleme)

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

propertyName geçerli bir özelliğin adı olacak şekilde çözümlenmelidir DataContext . Yol özellikleri propertyName ve propertyName2 bir ilişkide var olan herhangi bir özellik olabilir, burada değeri olan propertyName2 türde bir özelliktir propertyName .

Tek özellik, ekli veya başka bir şekilde Type-Qualified

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

Parantez, içindeki bu özelliğin PropertyPath kısmi bir nitelik kullanılarak oluşturulması gerektiğini gösterir. Uygun bir eşleme ile türü bulmak için bir XML ad alanı kullanabilir. ownerTypeHer derlemedeki bildirimler aracılığıyla BIR XAML işlemcisinin erişimi olan türleri arar XmlnsDefinitionAttribute . Çoğu uygulama, ad alanına eşlenmiş varsayılan XML ad alanına sahiptir http://schemas.microsoft.com/winfx/2006/xaml/presentation , bu nedenle bir ön ek genellikle yalnızca bu ad alanı dışında özel türler veya türler için gereklidir. propertyName , üzerinde varolan bir özelliğin adı olacak şekilde çözümlenmelidir ownerType . Bu sözdizimi genellikle aşağıdaki durumlardan biri için kullanılır:

  • Yol, belirtilen hedef türüne sahip olmayan bir stil veya şablonda bulunan XAML 'de belirtilmiştir. Nitelikli olmayan bir kullanım genellikle bunun dışındaki durumlar için geçerli değildir, çünkü stil dışı, şablon dışı durumlarda özellik bir tür değil bir örnekte bulunur.

  • Özelliği iliştirilmiş bir özelliktir.

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

Görsel taslak hedefi olarak kullanılmak üzere, olarak belirtilen özelliği propertyName bir olmalıdır DependencyProperty .

Kaynak geçişi (koleksiyonların hiyerarşilerine bağlama)

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

Bu söz dizimi, hiyerarşik bir veri kaynağı nesnesi içinde gezinmek için kullanılır ve hiyerarşide art arda/karakterlerle birlikte birden çok adım desteklenir. Geçerli kayıt işaretçisi konumuna ait kaynak çapraz geçiş hesapları, verilerin görünümünün kullanıcı arabirimiyle eşitlenmesi tarafından belirlenir. Hiyerarşik veri kaynağı nesneleriyle bağlama ve Veri bağlamada geçerli kayıt işaretçisinin kavramı ile ilgili ayrıntılar için bkz. Master-Detail modelini hiyerarşik verilerle kullanma veya veri bağlamaya genel bakış.

Not

Superficially, bu söz dizimi XPath olarak benzerdir. XML veri kaynağına bağlamak için doğru bir XPath ifadesi, değer olarak kullanılmaz Path ve bunun yerine birbirini dışlayan özellik için kullanılmalıdır XPath .

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ının önüne karma karakteri ( # ) ekleyin.

Geçerli kayıt Işaretçisi

Bir koleksiyon görünümü veya ana ayrıntı veri bağlama senaryosunda geçerli kayıt işaretçisine başvurmak için, yol dizesini eğik çizgiyle ( / ) başlatın. Eğik çizgiden sonraki tüm yol, geçerli kayıt işaretçisinden başlayarak gönderilir.

Çoklu Dizin oluşturucular

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

veya

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

Belirli bir nesne birden çok dizin oluşturucuyu destekliyorsa, bu dizin oluşturucular, bir diziye başvuran sözdizimine benzer şekilde sırayla belirlenebilir. Söz konusu nesne, geçerli bağlam ya da 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şturucuyu yazma hakkında ayrıntılı bilgi için bkz Binding.Path ..

Sözdizimleri karıştırma

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

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

Özellik yolu dizeleri için çıkar

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

  • Dizin oluşturucular ([]) içinde, giriş işareti karakteri (^) sonraki karakteri çıkar.

  • XML dil tanımına özel olan belirli karakterleri (XML varlıkları kullanarak) atlamanız gerekir. &"" Karakterini atlamak için kullanın & . >"" Bitiş etiketini atlamak için kullanın > .

  • \Biçimlendirme uzantısını işlemek IÇIN WPF XAML ayrıştırıcı davranışına özel olan karakterleri (ters eğik çizgi kullanarak) atlamanız gerekir.

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

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

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

    • Sağ küme ayracı ( } ), biçimlendirme uzantısının sonu.

Not

Teknik olarak, bu kaçış bir film şeridi özellik yolu için de çalışır, ancak genellikle var olan WPF nesneleri için nesne modellerinden geçiş yapmanız ve kaçışın gereksiz olması gerekir.

Animasyon hedefleri için PropertyPath

Bir animasyonun Target özelliği Freezable ya da bir temel türü alan bir Dependency özelliği olmalıdır. Ancak, bir türdeki hedeflenen özellik ve son animasyon özelliği farklı nesnelerde bulunabilir. Animasyonlar için, özellik değerlerindeki nesne özelliği ilişkilerinin geçişi yaparak adlandırılmış animasyon hedefi nesnesinin özelliği ve amaçlanan hedef animasyon özelliği arasındaki bağlantıyı tanımlamak için bir özellik yolu kullanılır.

Animasyonlar için genel Object-Property 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 hareketlendirilen özellik bir Freezable tür ya da ilkel olmalıdır. Yolu Başlatan özelliği, belirtilen türde var olan bir bağımlılık özelliğinin adı olacak şekilde çözümlenmelidir TargetName .

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

Hedef nesnedeki tek özellik

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

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

Dolaylı Özellik hedefleme

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

propertyNameFreezablebelirtilen türde var olan bir değer türü veya temel öğe olan bir özellik olmalıdır TargetName .

propertyName2 değeri olan nesnede bulunan Dependency özelliğinin adı olmalıdır propertyName . Diğer bir deyişle, propertyName2 türünde bir bağımlılık özelliği olarak bulunmalıdır propertyNamePropertyType .

Uygulanan stiller ve şablonlar nedeniyle animasyonların dolaylı olarak hedeflenmesi gerekir. Bir animasyonu hedeflemek için, bir TargetName hedef nesne üzerinde ve bu ad, TargetName veya ile oluşturulur Name . Şablon ve stil öğelerinin adları da olabilir, ancak bu adlar yalnızca stilin ve şablonun namescope içinde geçerlidir. (Şablonlar ve stiller, uygulama biçimlendirmesi ile ad kapsamları 'yi paylaşıyorsa, adlar benzersiz olamaz. Stiller ve şablonlar, örnekler arasında tam olarak paylaşılır ve yinelenen adları yeniden işlenir.) Bu nedenle, hareketlendirmek isteyebileceğiniz bir öğenin tek tek özellikleri bir stil veya şablondan geldiyse, bir stil şablonundan olmayan adlandırılmış bir öğe örneğiyle başlamanız ve ardından animasyon eklemek istediğiniz özelliğe ulaşmak için stil veya şablon görsel ağacını hedeflemek gerekir.

Örneğin, Background öğesinin özelliği bir Panel Tema şablonundan gelen tamamlanmış bir Brush şeydir (aslında a SolidColorBrush ). Tamamen hareketlendirmek için Brush , bir BrushAnimation (muhtemelen her tür için bir tane) olması gerekir Brush ve böyle bir tür yoktur. Fırçaya animasyon uygulamak için, bunun yerine belirli bir türün özelliklerine animasyon uygulayabilirsiniz Brush . SolidColorBrushBurada uygulamak için ' den ' a erişmeniz gerekir ColorColorAnimation . Bu örnek için özellik yolu olacaktır Background.Color .

İliştirilmiş Özellikler

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

Parantez, içindeki bu özelliğin PropertyPath kısmi bir nitelik kullanılarak oluşturulması gerektiğini gösterir. Türü bulmak için bir XML ad alanı kullanabilir. ownerTypeHer derlemedeki bildirimler aracılığıyla BIR XAML işlemcisinin erişimi olan türleri arar XmlnsDefinitionAttribute . Çoğu uygulama, ad alanına eşlenmiş varsayılan XML ad alanına sahiptir http://schemas.microsoft.com/winfx/2006/xaml/presentation , bu nedenle bir ön ek genellikle yalnızca bu ad alanı dışında özel türler veya türler için gereklidir. propertyName , üzerinde varolan bir özelliğin adı olacak şekilde çözümlenmelidir ownerType . Olarak belirtilen özelliği propertyName bir olmalıdır DependencyProperty . (WPF ekli tüm özellikler bağımlılık özellikleri olarak uygulanır, bu nedenle bu sorun yalnızca özel Ekli Özellikler için sorun olabilir.)

Dizin Oluşturucular

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

Çoğu bağımlılık özellikleri veya Freezable türleri bir dizin oluşturucuyu desteklemez. Bu nedenle, bir animasyon yolundaki dizin oluşturucunun tek kullanımı, adlandırılmış hedefte zinciri Başlatan özelliği ile son animasyonlu özelliği arasında bir ara konumda bulunur. Belirtilen sözdiziminde, diğer bir deyişle propertyName2 . Örneğin, ara özellik gibi bir özellik yolunda bir koleksiyon ise, Dizin Oluşturucu kullanımı gerekli olabilir TransformGroupRenderTransform.Children[1].Angle .

Kodda PropertyPath

' PropertyPath Nin nasıl oluşturulacağı dahil olmak üzere kod kullanımı, PropertyPath için başvuru konusunda belgelenmiştir PropertyPath .

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

Ayrıca bkz.