Aracılığıyla paylaş


Özellik yolu söz dizimi

PropertyPath sınıfını ve dize söz dizimini kullanarak XAML'de veya kodda bir PropertyPath değeri örneği oluşturabilirsiniz. PropertyPath değerleri veri bağlama tarafından kullanılır. Hikaye tahtasıyla oluşturulmuş animasyonları hedeflemek için benzer bir söz dizimi kullanılır. Her iki senaryo için de bir özellik yolu, sonunda tek bir özelliğe çözümleyen bir veya daha fazla nesne özelliği ilişkisine geçişi açıklar.

Bir özellik yolu dizesini doğrudan XAML'deki bir özniteliğe ayarlayabilirsiniz. Kodda Bağlama ayarlayan bir PropertyPath oluşturmak veya SetTargetProperty kullanarak kodda animasyon hedefi ayarlamak için aynı dize söz dizimini kullanabilirsiniz. Windows Çalışma Zamanı'nda özellik yolu kullanan iki ayrı özellik alanı vardır: veri bağlama ve animasyon hedefleme. Animasyon hedefleme, Windows Çalışma Zamanı uygulamasında temel özellik yolu söz dizimi değerleri oluşturmaz, bilgileri dize olarak tutar, ancak nesne-özellik geçişi kavramları çok benzerdir. Her bir özelliği hedefleyen veri bağlama ve animasyon, bir özellik yolunu biraz farklı değerlendirir, bu nedenle özellik yolu söz dizimlerini her bir özellik için ayrı ayrı açıklarız.

Veri bağlamadaki nesneler için özellik yolu

Windows Çalışma Zamanı'nda, herhangi bir bağımlılık özelliğinin hedef değerine bağlanabilirsiniz. Veri bağlamanın kaynak özellik değerinin bağımlılık özelliği olması gerekmez; bir iş nesnesindeki bir özellik olabilir (örneğin, Microsoft .NET dilinde veya C++'da yazılmış bir sınıf). Veya bağlama değerinin kaynak nesnesi, uygulama tarafından önceden tanımlanmış mevcut bir bağımlılık nesnesi olabilir. Kaynağa basit bir özellik adıyla veya iş nesnesinin nesne grafiğindeki nesne özelliği ilişkilerinin çapraz geçişiyle başvurulabilir.

Tek bir özellik değerine bağlanabilir veya listeleri veya koleksiyonları barındıran bir hedef özelliğe bağlayabilirsiniz. Kaynağınız bir koleksiyonsa veya yol bir koleksiyon özelliği belirtiyorsa, veri bağlama altyapısı kaynağın koleksiyon öğelerini bağlama hedefiyle eşleştirir ve bu da söz konusu koleksiyondaki belirli öğeleri tahmin etmeye gerek kalmadan bir ListBox'ı veri kaynağı koleksiyonundaki öğelerin listesiyle doldurma gibi bir davranışla sonuçlanır.

Nesne grafı üzerinde gezinme

Bir nesne grafiğindeki nesne-özellik ilişkisinin çapraz geçişini belirten söz diziminin öğesi nokta (.) karakteridir. Özellik yolu dizesindeki her nokta, bir nesne (noktanın sol tarafı) ile o nesnenin özelliği (noktanın sağ tarafı) arasında bir bölme olduğunu gösterir. Dize, birden çok nesne-özellik ilişkisi üzerinde adım adım geçiş yapmaya olanak tanıyan soldan sağa doğru değerlendirilir. Bir örneğe bakalım:

"{Binding Path=Customer.Address.StreetAddress1}"

Bu yol şu şekilde değerlendirilir:

  1. Veri bağlamı nesnesi (veya aynı Bağlama tarafından belirtilen bir Kaynak) "Customer" adlı bir özellik için aranılır.
  2. "Customer" özelliğinin değeri olan nesnede "Address" adlı bir özellik aranmaktadır.
  3. "Address" özelliğinin değeri olan nesnede "StreetAddress1" adlı bir özellik aranmaktadır.

Bu adımların her birinde değer bir nesne olarak değerlendirilir. Sonucun türü yalnızca bağlama belirli bir özelliğe uygulandığında denetlenebilir. "Adres" yalnızca dizenin hangi bölümünün sokak adresi olduğunu göstermemiş bir dize değeriyse bu örnek başarısız olur. Genellikle bağlama, bilinen ve kasıtlı bilgi yapısına sahip bir iş nesnesinin belirli iç içe özellik değerlerine işaret eder.

Veri bağlama özelliği yolundaki özellikler için kurallar

  • Bir özellik yolu tarafından başvuruda bulunılan tüm özellikler kaynak iş nesnesinde genel olmalıdır.
  • End özelliği (yoldaki son adlandırılmış özellik olan özellik) genel olmalı ve değiştirilebilir olmalıdır; statik değerlere bağlanamazsınız.
  • Bu yol, iki yönlü bağlamanın Yol bilgileri olarak kullanılıyorsa end özelliğinin okunması/yazılması gerekir.

Dizinleyiciler

Veri bağlama için özellik yolu, dizine alınan özelliklere başvurular içerebilir. Bu, sıralı listelere/vektörlere veya sözlüklere/haritalara bağlamayı sağlar. Dizine alınmış bir özelliği belirtmek için köşeli ayraç "[]" karakterlerini kullanın. Bu köşeli ayraçların içeriği bir tamsayı (sıralı liste için) veya tırnaksız metin (sözlükler için) olabilir. Ayrıca, anahtarın tamsayı olduğu bir sözlüğe de bağlanabilirsiniz. Aynı yol üzerinde, nesne-özelliği ayıran bir nokta ile farklı indekslenmiş özellikleri kullanabilirsiniz.

Örneğin, her birinde her oyuncunun soyadının anahtar olarak kullanıldığı "Oyuncular" sözlüğüne sahip olan "Takımlar" (sıralı bir liste) listesinin bulunduğu bir iş nesnesi düşünün. İkinci takımdaki belirli bir oyuncuya örnek bir özellik yolu: "Teams[1].Players[Smith]". (Liste sıfır dizinli olduğundan "Teams" içindeki ikinci öğeyi belirtmek için 1 kullanırsınız.)

Uyarı

C++ veri kaynakları için dizin oluşturma desteği sınırlıdır; Bkz. Derinlemesine veri bağlama.

Ekli özellikler

Özellik yolları, ekli özelliklere başvurular içerebilir. Ekli özelliğin tanımlayıcı adı zaten bir nokta içerdiğinden, noktanın nesne özelliği adımı olarak kabul edilmemesi için ekli özellik adlarını parantez içine almanız gerekir. Örneğin, bağlama yolu olarak Canvas.ZIndex kullanmak istediğinizi belirteceğiniz dize "(Canvas.ZIndex)" şeklindedir. Ekli özellikler hakkında daha fazla bilgi için bkz. Ekli özelliklere genel bakış.

Özellik yolu söz dizimlerini birleştirme

Özellik yolu söz diziminin çeşitli öğelerini tek bir dizede birleştirebilirsiniz. Örneğin, veri kaynağınızda böyle bir özellik varsa, dizine eklenmiş bir özelliğe başvuran bir özellik yolu tanımlayabilirsiniz.

Bağlama özelliği yolunda hata giderme

Özellik yolu bir bağlama altyapısı tarafından yorumlandığından ve yalnızca çalışma zamanında mevcut olabilecek bilgilere dayandığından, geliştirme araçlarında geleneksel tasarım zamanı veya derleme zamanı desteğine güvenmeden genellikle bağlama için bir özellik yolunda hata ayıklamanız gerekir. Çoğu durumda, bir özellik yolunun çözümlenememesinin çalışma zamanı sonucu, hatasız boş bir değerdir çünkü bu, bağlama çözümlemesinin tasarım gereği geri dönüş davranışıdır. Neyse ki Microsoft Visual Studio, bir bağlama kaynağını belirten özellik yolunun hangi bölümünün çözümlenemediğini tespit edebilen bir hata ayıklama çıkış modu sağlar. Bu geliştirme aracı özelliğini kullanma hakkında daha fazla bilgi için Veri Bağlamayı Ayrıntılı Kullanımı'nın "Hata Ayıklama" bölümüne bakın.

Animasyon hedefleme için özellik yolu

Animasyonlar, animasyon çalıştırıldığında görsel taslak değerlerin uygulandığı bir bağımlılık özelliğini hedeflemeyi temel alır. Animasyonu oluşturulacak özelliğin bulunduğu nesneyi tanımlamak için animasyon bir öğeyi ada göre hedefler (x:Name özniteliği). Genellikle Storyboard.TargetName olarak tanımlanan nesneyle başlayan ve animasyonunun geçerli olması gereken belirli bağımlılık özelliği değeriyle biten bir özellik yolu tanımlamak gerekir. Bu özellik yolu Storyboard.TargetProperty değeri olarak kullanılır.

XAML'de animasyon tanımlama hakkında daha fazla bilgi için bkz . Görsel taslaklı animasyonlar.

Basit hedefleme

Hedeflenen nesnenin kendisinde var olan bir özelliğin animasyonunu oluşturursanız ve bu özelliğin türüne doğrudan bir animasyon uygulanmış olabilir (bir özelliğin değerinin alt özelliği yerine) daha fazla niteleme yapmadan animasyonlu özelliği adlandırabilirsiniz. Örneğin, Rectangle gibi bir Şekil alt sınıfını hedeflediyseniz ve Fill özelliğine animasyonlu bir Renk uyguluyorsanız, özellik yolunuz "Dolgu" olabilir.

Dolaylı özellik hedefleme

Hedef nesnenin alt özelliği olan bir özelliğe animasyon uygulayabilirsiniz. Başka bir deyişle, nesnenin kendisi olan hedef nesnenin bir özelliği varsa ve bu nesnenin özellikleri varsa, bu nesne-özellik ilişkisinde nasıl adım atılacağını açıklayan bir özellik yolu tanımlamanız gerekir. Bir alt özelliğe animasyon eklemek istediğiniz bir nesne belirttiğinizde, özellik adını parantez içine alır ve özelliği tür adında belirtirsiniz. özellik adı biçimi. Örneğin, hedef nesnenin RenderTransform özelliğinin nesne değerini istediğinizi belirtmek için, özellik yolunun ilk adımı olarak "(UIElement.RenderTransform)" değerini belirtirsiniz. Dönüştürme değerine doğrudan uygulanabilecek animasyonlar olmadığından bu henüz tam bir yol değildir. Bu nedenle, bu örnekte artık özellik yolunu tamamlayarak end özelliğinin Bir Transform alt sınıfının Double değeriyle animasyonlu hale getirilebilen bir özelliği olmasını sağlarsınız: "(UIElement.RenderTransform). (CompositeTransform.TranslateX)"

Koleksiyonda belirli bir alt nesneyi belirleme

Koleksiyon özelliğinde bir alt öğe belirtmek için sayısal dizin oluşturucu kullanabilirsiniz. Tamsayı dizin değerinin etrafında köşeli ayraç "[]" karakterleri kullanın. Sözlüklere değil, yalnızca sıralı listelere başvurabilirsiniz. Koleksiyon animasyonlu bir değer olmadığından, dizin oluşturucu kullanımı hiçbir zaman özellik yolundaki end özelliği olamaz.

Örneğin, denetimin Background özelliğine uygulanan LinearGradientBrush'ta ilk renk durdurma rengine animasyon eklemek istediğinizi belirtmek için şu özellik yoludur: "(Control.Background). (GradientBrush.GradientStops)[0]. (GradientStop.Color)". Dizin oluşturucunun yoldaki son adım olmadığını ve son adımın özellikle koleksiyondaki öğe 0'ın GradientStop.Color özelliğine başvurarak renk animasyonlu bir değer uygulaması gerektiğini unutmayın.

Ekli bir özelliği animasyon ile canlandırma

Bu yaygın bir senaryo değildir, ancak ekli özelliğin animasyon türüyle eşleşen bir özellik değeri olduğu sürece ekli bir özelliğe animasyon eklemek mümkündür. Ekli özelliğin tanımlayıcı adı zaten bir nokta içerdiğinden, noktanın nesne özelliği adımı olarak kabul edilmemesi için ekli özellik adlarını parantez içine almanız gerekir. Örneğin, bir nesnenin Grid.Row iliştirilmiş özelliği üzerinde animasyon yapmak istediğinizi belirten dizeyi belirtmek için özellik yolu formatı olarak "(Grid.Row)" ifadesini kullanın.

Uyarı

Bu örnekte Grid.Row değeri bir Int32 özellik türüdür. bu nedenle Double animasyonuyla animasyon uygulayamazsınız. Bunun yerine, ObjectKeyFrame.Value değerinin "0" veya "1" gibi bir tamsayıya ayarlandığı DiscreteObjectKeyFrame bileşenlerine sahip bir ObjectAnimationUsingKeyFrames tanımlarsınız.

Animasyonun hedeflediği özellik yolundaki özellikler için kurallar

  • Özellik yolunun varsayılan başlangıç noktası, Storyboard.TargetName tarafından tanımlanan nesnedir.
  • Özellik yolu boyunca başvuruda bulunulan tüm nesneler ve özellikler genel olmalıdır.
  • End özelliği (yoldaki son adlandırılmış özellik olan özellik) genel, okuma-yazma ve bağımlılık özelliği olmalıdır.
  • End özelliğinin, geniş animasyon türü sınıflarından biri (Renk animasyonları, Çift animasyonlar, Nokta animasyonları, ObjectAnimationUsingKeyFrames) tarafından animasyon edilebilen bir özellik türü olmalıdır.

PropertyPath sınıfı

PropertyPath sınıfı, bağlama senaryosu için Binding.Path dosyasının temel alınan özellik türüdür.

Çoğu zaman, herhangi bir kod kullanmadan XAML'de bir PropertyPath uygulayabilirsiniz. Ancak bazı durumlarda kod kullanarak bir PropertyPath nesnesi tanımlamak ve bunu çalışma zamanında bir özelliğe atamak isteyebilirsiniz.

PropertyPath'inbir PropertyPath(String) oluşturucusu vardır ve varsayılan oluşturucus yoktur. Bu oluşturucuya geçirdiğiniz dize, daha önce açıkladığımız gibi özellik yolu söz dizimi kullanılarak tanımlanan bir dizedir. Bu aynı zamanda Path'i XAML özniteliği olarak atamak için kullandığınız dizeyle aynıdır. PropertyPath sınıfının diğer tek API'si salt okunur olan Path özelliğidir. Bu özelliği başka bir PropertyPath örneğinin yapı dizesi olarak kullanabilirsiniz.