Aracılığıyla paylaş


Bağımlılık özelliklerine genel bakış

Bu konu başlığı altında, kullanıcı arabirimi için XAML tanımlarına sahip bir Windows Çalışma Zamanı uygulaması yazdığınızda kullanılabilen bağımlılık özellik sistemi açıklanmaktadır.

Bağımlılık özelliği nedir?

Bağımlılık özelliği özel bir özellik türüdür. Özellikle özelliğin değerinin izlendiği ve Windows Çalışma Zamanı'nın parçası olan ayrılmış bir özellik sisteminden etkilendiği bir özelliktir.

Bir bağımlılık özelliğini desteklemek için, özelliğini tanımlayan nesne bir DependencyObject (başka bir deyişle devralma içinde bir yerde DependencyObject temel sınıfına sahip bir sınıf) olmalıdır. XAML içeren bir UWP uygulaması için ui tanımlarınız için kullandığınız türlerin çoğu DependencyObject alt sınıfı olur ve bağımlılık özelliklerini destekler. Ancak adında "XAML" olmayan bir Windows Çalışma Zamanı ad alanından gelen her tür bağımlılık özelliklerini desteklemez; bu tür türlerin özellikleri, özellik sisteminin bağımlılık davranışına sahip olmayan sıradan özelliklerdir.

Bağımlılık özelliklerinin amacı, bir özelliğin değerini diğer girişlere (çalışırken uygulamanız içinde gerçekleşen diğer özellikler, olaylar ve durumlar) temel alarak hesaplamak için sistemik bir yol sağlamaktır. Bu diğer girişler şunları içerebilir:

  • Kullanıcı tercihi gibi dış giriş
  • Veri bağlama, animasyonlar ve görsel taslaklar gibi tam zamanında özellik belirleme mekanizmaları
  • Kaynaklar ve stiller gibi birden çok kullanımlı şablon oluşturma desenleri
  • Nesne ağacındaki diğer öğelerle ebeveyn-çocuk ilişkileri aracılığıyla bilinen değerler

Bağımlılık özelliği, kullanıcı arabirimi için XAML ile bir Windows Çalışma Zamanı uygulaması tanımlamak için programlama modelinin belirli bir özelliğini temsil eder veya destekler. Bu özellikler şunlardır:

  • Veri bağlama
  • Stil
  • Görsel taslak animasyonlar
  • "PropertyChanged" davranışı; değişiklikleri diğer bağımlılık özelliklerine yayabilen geri çağırmalar sağlamak amacıyla bir bağımlılık özelliği olarak uygulanabilir.
  • Özellik meta verilerinden gelen varsayılan değeri kullanma
  • ClearValue ve meta veri araması gibi genel özellik sistemi araçları

Bağımlılık özellikleri ve Windows Çalışma Zamanı özellikleri

Bağımlılık özellikleri, çalışma zamanında bir uygulamadaki tüm bağımlılık özelliklerini destekleyen genel bir iç özellik deposu sağlayarak temel Windows Çalışma Zamanı özellik işlevselliğini genişletir. Bu, özellik tanımı sınıfında özel olan özel bir alanla bir özelliği yedeklemenin standart desenine bir alternatiftir. Bu iç özellik depolarını belirli bir nesne için var olan bir özellik tanımlayıcıları ve değerleri kümesi olarak düşünebilirsiniz ( dependencyObject olduğu sürece). Mağazadaki her özellik, ad yerine bir DependencyProperty örneği ile belirlenir. Ancak özellik sistemi çoğunlukla bu uygulama ayrıntısını gizler: Bağımlılık özelliklerine genellikle basit bir ad (kullandığınız kod dilindeki program özelliği adı veya XAML yazarken bir öznitelik adı) kullanarak erişebilirsiniz.

Bağımlılık özellik sisteminin temellerini sağlayan temel tür DependencyObject'tir. DependencyObject , bağımlılık özelliğine erişebilen yöntemleri tanımlar ve DependencyObject türetilmiş sınıfının örnekleri daha önce bahsettiğimiz özellik deposu kavramını dahili olarak destekler.

Bağımlılık özelliklerini tartışırken belgelerde kullandığımız terminolojinin bir özeti aşağıdadır:

Süre Description
Dependency özelliği DependencyProperty tanımlayıcısı üzerinde bulunan bir özellik (aşağıya bakın). Bu tanımlayıcı genellikle DependencyObject türetilmiş sınıfı tanımlamanın statik bir üyesi olarak kullanılabilir.
Bağımlılık özelliği tanımlayıcısı Özelliği tanımlamak için sabit bir değerdir; genellikle genel ve salt okunurdur.
Özellik sarmalayıcı Bir Windows Çalışma Zamanı özelliği için çağrılabilen alma ve ayarlama uygulamaları. Veya özgün tanımın dile özgü projeksiyonu. Get özellik sarmalayıcı uygulaması, ilgili bağımlılık özellik tanımlayıcısını geçirerek GetValue'yi çağırır.

Özellik sarmalayıcı yalnızca çağıranlar için kolaylık sağlamaz, bağımlılık özelliğini özellikler için Windows Çalışma Zamanı tanımlarını kullanan herhangi bir işlem, araç veya projeksiyon için de kullanıma sunar.

Aşağıdaki örnek, C# için tanımlanan özel bağımlılık özelliğini tanımlar ve bağımlılık özelliği tanımlayıcısının özellik sarmalayıcıyla ilişkisini gösterir.

public static readonly DependencyProperty LabelProperty = DependencyProperty.Register(
  "Label",
  typeof(string),
  typeof(ImageWithLabelControl),
  new PropertyMetadata(null)
);


public string Label
{
    get { return (string)GetValue(LabelProperty); }
    set { SetValue(LabelProperty, value); }
}

Uyarı

Yukarıdaki örnek, özel bağımlılık özelliğinin nasıl oluşturulacağıyla ilgili tam örnek olarak tasarlanmamıştır. Kod aracılığıyla kavramları öğrenmeyi tercih eden herkes için bağımlılık özelliği kavramlarını göstermeye yöneliktir. Bu örneğin daha eksiksiz bir açıklaması için bkz. Özel bağımlılık özellikleri.

Bağımlılık özelliği değeri öncelik sırası

Bir bağımlılık özelliğinin değerini aldığınızda, Windows Çalışma Zamanı özellik sistemine katılan girişlerden herhangi biri aracılığıyla bu özellik için belirlenen bir değer elde edersiniz. Bağımlılık özelliği değeri önceliği, Windows Çalışma Zamanı özellik sisteminin değerleri tahmin edilebilir bir şekilde hesaplayabilmesi için vardır ve temel öncelik sırasına da aşina olmanız önemlidir. Aksi takdirde, bir özelliği bir öncelik düzeyinde ayarlamaya çalıştığınız ancak başka bir şeyin (sistem, üçüncü taraf arayanlar, kendi kodunuzun bir kısmı) başka bir düzeyde ayarladığı bir durumda kendinizi bulabilirsiniz ve hangi özellik değerinin kullanıldığını ve bu değerin nereden geldiğini bulmaya çalışırken hayal kırıklığına uğrayabilirsiniz.

Örneğin, stiller ve şablonlar, özellik değerleri ve dolayısıyla denetimin görünümlerini oluşturmak için paylaşılan bir başlangıç noktası olarak tasarlanmıştır. Ancak belirli bir denetim örneğinde, değerini ortak şablonlu değerle karşılaştırmalı olarak değiştirmek isteyebilirsiniz; örneğin, bu denetime farklı bir arka plan rengi veya içerik olarak farklı bir metin dizesi vererek. Windows Çalışma Zamanı özellik sistemi, yerel değerleri stiller ve şablonlar tarafından sağlanan değerlerden daha yüksek öncelikli olarak değerlendirir. Bu, uygulamaya özgü değerlerin şablonların üzerine yazılmasını sağlayarak denetimlerin uygulama kullanıcı arabiriminde kendi kullanımınız için yararlı olmasını sağlar.

Bağımlılık özelliği öncelik listesi

Aşağıda, bir bağımlılık özelliği için çalışma zamanı değerini atarken özellik sisteminin kullandığı kesin sıra yer alır. En yüksek öncelik önce listelenir. Bu listenin hemen sonlarında daha ayrıntılı açıklamalar bulabilirsiniz.

  1. Animasyonlu değerler: Etkin animasyonlar, görsel durum animasyonları veya HoldEnd davranışına sahip animasyonlar. Herhangi bir pratik efektin olması için, bir özelliğe uygulanan animasyonun, bu değer yerel olarak ayarlanmış olsa bile temel (animasyonsuz) değere göre önceliğe sahip olması gerekir.
  2. Yerel değer: Yerel bir değer, XAML'de bir öznitelik veya özellik öğesi olarak ayarlamaya veya belirli bir örneğin özelliğini kullanarak SetValue yöntemine yapılan bir çağrıya eşit olan özellik sarmalayıcının kolaylığı aracılığıyla ayarlanabilir. Bağlama veya statik kaynak kullanarak yerel bir değer ayarlarsanız, bunların her biri yerel bir değer ayarlanmış gibi öncelik içinde hareket eder ve yeni bir yerel değer ayarlanırsa bağlamalar veya kaynak başvuruları silinir.
  3. Şablonlu özellikler: Bir öğe, bir şablonun parçası olarak oluşturulduysa (ControlTemplate veya DataTemplate'dan) bunlara sahiptir.
  4. Stil ayarlayıcıları: Sayfa veya uygulama kaynaklarından stiller içindeki bir Ayarlayıcıdaki değerler.
  5. Varsayılan değer: Bağımlılık özelliği, meta verilerinin bir parçası olarak varsayılan değere sahip olabilir.

Şablonlu özellikler

Öncelik öğesi olarak şablonlanmış özellikler, doğrudan XAML sayfa işaretlemesinde bildirdiğiniz bir öğenin hiçbir özelliğine uygulanmaz. Şablonlu özellik kavramı yalnızca Windows Çalışma Zamanı kullanıcı arabirimi öğesine bir XAML şablonu uyguladığında oluşturulan ve dolayısıyla görsellerini tanımlayan nesneler için mevcuttur.

Bir denetim şablonundan ayarlanan tüm özelliklerin bir tür değeri vardır. Bu değerler neredeyse denetim için genişletilmiş bir varsayılan değerler kümesi gibidir ve genellikle özellik değerlerini doğrudan ayarlayarak daha sonra sıfırlayabileceğiniz değerlerle ilişkilendirilir. Bu nedenle, herhangi bir yeni yerel değerin üzerine yazabilmesi için şablon kümesi değerleri gerçek bir yerel değerden ayırt edilebilir olmalıdır.

Uyarı

Şablon, bazı durumlarda, yerel değerleri bile geçersiz kılabilir; özellikle şablon, örneklerde ayarlanabilir olması gereken özellikler için {TemplateBinding} işaretleme uzantısı referanslarını sunamadığında. Bu genellikle yalnızca özelliğin örneklerde ayarlanması amaçlanmamışsa, örneğin yalnızca görsellerle ve şablon davranışıyla ilgiliyse ve şablonu kullanan denetimin amaçlanan işleviyle veya çalışma zamanı mantığıyla ilgili değilse yapılır.

Bağlamalar ve öncelik

Bağlama işlemleri, kullanıldıkları kapsam için uygun önceliğe sahiptir. Örneğin, yerel bir değere uygulanan bir {Binding} yerel değer işlevi görür ve bir özellik ayarlayıcısı için bir {TemplateBinding} işaretleme uzantısı stil ayarlayıcısının uyguladığı gibi uygulanır. Bağlamaların veri kaynaklarından değer almak için çalışma zamanına kadar beklemesi gerektiğinden, herhangi bir özelliğin özellik değeri önceliğini belirleme işlemi de çalışma zamanına genişletir.

Bağlamalar yalnızca yerel bir değerle aynı önceliğe sahip değildir, aynı zamanda bağlamanın ertelenmiş bir değerin yer tutucusu olduğu yerel bir değerdir. Bir özellik değeri için bir bağlamanız varsa ve çalışma zamanında bu değer üzerinde yerel bir değer ayarlarsanız, bu bağlamanın tamamen yerini alır. Benzer şekilde, yalnızca çalışma zamanında ortaya çıkan bir bağlama tanımlamak için SetBinding'i çağırırsanız, XAML'de uygulamış olabileceğiniz yerel değerleri veya daha önce yürütülen kodla değiştirirsiniz.

Storyboard'lanmış animasyonlar ve temel değer

Görsel taslaklı animasyonlar bir temel değer kavramına göre hareket eder. Temel değer, özellik sistemi tarafından öncelik sıralaması kullanılarak belirlenen, ancak son adım olarak animasyonlara bakılmasının atlandığı bir değerdir. Örneğin, bir temel değer denetimin şablonundan veya denetimin bir örneğinde yerel bir değer ayarlamaktan gelebilir. Animasyon uygulamak her iki durumda da bu temel değeri geçersiz kılar ve animasyon çalışmaya devam ettikçe animasyonlu değeri uygular.

Animasyonlu bir özellik için, animasyon tamamlandığında özelliği temel değerine döndürüyorsa veya Başlangıç ve Bitiş açıkça belirtilmemişse, temel değer animasyonun davranışı üzerinde bir etkisi olabilir. Bu gibi durumlarda, bir animasyon artık çalışmadıktan sonra, önceliğin geri kalanı yeniden kullanılır.

Ancak, HoldEnd davranışına sahip bir To belirten bir animasyon, görsel olarak durdurulmuş gibi görünse bile animasyon kaldırılana kadar yerel değeri geçersiz kılabilir. Kavramsal olarak bu, kullanıcı arabiriminde görsel bir animasyon olmasa bile sonsuza kadar çalışan bir animasyon gibidir.

Tek bir özelliğe birden çok animasyon uygulanabilir. Bu animasyonların her biri, değer öncesindeki farklı noktalardan gelen temel değerleri değiştirmek için tanımlanmış olabilir. Ancak, bu animasyonların tümü çalışma zamanında aynı anda çalışır ve bu genellikle her animasyon değer üzerinde eşit etkiye sahip olduğundan değerlerini birleştirmeleri gerektiği anlamına gelir. Bu, animasyonların tam olarak nasıl tanımlandığına ve animasyonlu olan değerin türüne bağlıdır.

Daha fazla bilgi için bkz. Storyboard animasyonları.

Varsayılan değerler

PropertyMetadata değeriyle bir bağımlılık özelliği için varsayılan değerin oluşturulması, Özel bağımlılık özellikleri konusunda daha ayrıntılı olarak açıklanmıştır.

Bağımlılık özellikleri, bu varsayılan değerler özelliğin meta verilerinde açıkça tanımlanmamış olsa bile varsayılan değerlere sahip olmaya devam eder. Meta veriler tarafından değiştirilmedikleri sürece, Windows Çalışma Zamanı bağımlılık özellikleri için varsayılan değerler genellikle aşağıdakilerden biridir:

  • Çalışma zamanı nesnesi veya temel Nesne türü ( başvuru türü) kullanan bir özelliğin varsayılan değeri null olur. Örneğin , DataContext kasıtlı olarak ayarlanana veya devralınana kadar null olur.
  • Sayılar veya Boole değeri ( değer türü) gibi temel bir değer kullanan bir özellik, bu değer için beklenen varsayılan değeri kullanır. Örneğin, tamsayılar ve kayan noktalı sayılar için 0, Boole değeri için false .
  • Windows Çalışma Zamanı yapısı kullanan bir özelliğin, bu yapının örtük varsayılan oluşturucus un çağrılarak elde edilen bir varsayılan değeri vardır. Bu oluşturucu, yapının temel değer alanlarının her biri için varsayılan değerleri kullanır. Örneğin, bir Nokta değeri, X ve Y değerleri 0 olarak başlatılarak varsayılan hale getirilir.
  • Numaralandırma kullanan bir özellik, bu numaralandırmada tanımlanan ilk üyenin varsayılan değerine sahiptir. Varsayılan değerin ne olduğunu görmek için belirli numaralandırmaları kontrol edin.
  • Dize kullanan bir özelliğin (.NET için System.String , C++/CX için Platform::String ) varsayılan değeri boş bir dizedir ("").
  • Koleksiyon özellikleri genellikle bağımlılık özellikleri olarak uygulanmaz. Bunun nedeni, bu konu başlığında daha ayrıntılı olarak ele alınmasıdır. Ancak özel bir koleksiyon özelliği uygularsanız ve bunun bir bağımlılık özelliği olmasını istiyorsanız, Özel bağımlılık özelliklerinin sonuna yakın bir zamanda açıklandığı gibi kasıtsız tekillerden kaçınmayı unutmayın.

Bağımlılık özelliği tarafından sağlanan özellik işlevselliği

Veri bağlama

Bir bağımlılık özelliği, veri bağlaması uygulayarak değerini ayarlayabilir. Veri bağlama, XAML'de {Binding} işaretleme uzantısı söz dizimini, {x:Bind} işaretleme uzantısını veya koddaki Bağlama sınıfını kullanır. Veri bağlama özelliği için, son özellik değeri belirlemesi çalışma zamanına kadar ertelenmiş olur. Bu sırada değer bir veri kaynağından alınır. Bağımlılık özellik sisteminin burada oynadığı rol, değer henüz bilinmediğinde XAML yükleme gibi işlemler için bir yer tutucu davranışı etkinleştirmek ve ardından Windows Çalışma Zamanı veri bağlama altyapısıyla etkileşim kurarak çalışma zamanında değeri sağlamaktır.

Aşağıdaki örnek, XAML'de bağlama kullanarak TextBlock öğesinin Text değerini ayarlar. Bağlama, devralınan bir veri bağlamı ve nesne veri kaynağı kullanır. (Bunların ikisi de kısaltılmış örnekte gösterilmez; bağlamı ve kaynağı gösteren daha eksiksiz bir örnek için bkz . Derinlemesine veri bağlama.)

<Canvas>
  <TextBlock Text="{Binding Team.TeamName}"/>
</Canvas>

Ayrıca XAML yerine kod kullanarak bağlamalar oluşturabilirsiniz. Bkz. SetBinding.

Uyarı

Bunun gibi bağlamalar, bağımlılık özelliği değeri önceliği amacıyla yerel bir değer olarak değerlendirilir. Başlangıçta Bağlama değerine sahip bir özellik için başka bir yerel değer ayarlarsanız, bağlamanın yalnızca çalışma zamanı değerini değil, tümünü tamamen kaldırır ve yerine yazarsınız. {x:Bind} Bağlamalar, özelliği için yerel bir değer ayarlayacak oluşturulan kod kullanılarak uygulanır. {x:Bind} kullanan bir özellik için yerel bir değer ayarlarsanız, bu değer, bağlamanın bir sonraki değerlendirmesinde (örneğin, kaynak nesnesinde bir özellik değişikliği gözlemlediğinde) değiştirilir.

Bağlama kaynakları, bağlama hedefleri, FrameworkElement rolü

Bağlamanın kaynağı olmak için bir özelliğin bağımlılık özelliği olması gerekmez; Genellikle herhangi bir özelliği bağlama kaynağı olarak kullanabilirsiniz, ancak bu programlama dilinize bağlıdır ve her birinin belirli uç durumları vardır. Ancak, {Binding} işaretleme uzantısının veya Bağlamanın hedefi olmak için bu özelliğin bir bağımlılık özelliği olması gerekir. {x:Bind} bağlama değerlerini uygulamak için oluşturulan kodu kullandığından bu gereksinime sahip değil.

Kodda bağlama oluşturuyorsanız SetBinding API'sinin yalnızca FrameworkElement için tanımlandığını unutmayın. Ancak, bunun yerine BindingOperations kullanarak bir bağlama tanımı oluşturabilir ve bu nedenle herhangi bir DependencyObject özelliğine başvurabilirsiniz.

Kod veya XAML için DataContext'in bir FrameworkElement özelliği olduğunu unutmayın. Bağlama sistemi, üst-alt özellik devralma biçimini kullanarak (genellikle XAML işaretlemesinde oluşturulur), bir üst öğede var olan DataContext'i çözümleyebilir. Bu devralma, alt nesne (hedef özelliğe sahip olan) bir FrameworkElement olmasa ve bu nedenle kendi DataContext değerini tutmasa bile değerlendirebilir. Ancak, DataContext'i ayarlayıp tutmak için devralınan üst öğenin bir FrameworkElement olması gerekir. Alternatif olarak, bağlamayı DataContext için null değerle çalışabilecek şekilde tanımlamanız gerekir.

Çoğu veri bağlama senaryosu için gereken tek şey bağlamayı yapılandırmak değildir. Tek yönlü veya iki yönlü bağlamanın etkili olması için kaynak özelliğin bağlama sistemine ve dolayısıyla hedefe yayılan değişiklik bildirimlerini desteklemesi gerekir. Özel bağlama kaynakları için bu, özelliğin bir bağımlılık özelliği olması veya nesnenin INotifyPropertyChanged'i desteklemesi gerektiği anlamına gelir. Koleksiyonlar INotifyCollectionChanged'i desteklemelidir. Bazı sınıflar, veri bağlama senaryoları için temel sınıflar olarak yararlı olmaları için uygulamalarında bu arabirimleri destekler; Bu tür bir sınıfa örnek olarak ObservableCollection<T> gösterilebilir. Veri bağlama ve veri bağlamanın özellik sistemiyle ilişkisi hakkında daha fazla bilgi için bkz. Ayrıntılı veri bağlama.

Uyarı

Burada listelenen türler Microsoft .NET veri kaynaklarını destekler. C++/CX veri kaynakları değişiklik bildirimi veya gözlemlenebilir davranış için farklı arabirimler kullanır, bkz. Ayrıntılı veri bağlama.

Stiller ve şablonlar

Stiller ve şablonlar, bağımlılık özellikleri olarak tanımlanan özelliklere yönelik iki senaryodur. Stiller, uygulamanın kullanıcı arayüzünü tanımlayan özellikleri belirlemek için faydalıdır. Stiller, XAML'deki kaynaklar olarak, Kaynaklar koleksiyonunda bir giriş olarak veya tema kaynak sözlükleri gibi ayrı XAML dosyalarında tanımlanır. Stiller, özellikleri ayarlayıcılar içerdiğinden özellik sistemiyle etkileşim içindedir. Buradaki en önemli özellik, bir Denetimin Control.Template özelliğidir: Denetimin görsel görünümünün ve görsel durumunun çoğunu tanımlar. Stiller hakkında daha fazla bilgi ve Stil tanımlayan ve ayarlayıcıları kullanan bazı örnek XAML'ler için bkz. Stil oluşturma denetimleri.

Stillerden veya şablonlardan gelen değerler, bağlamalara benzer şekilde ertelenmiş değerlerdir. Bu, denetim kullanıcılarının denetimleri yeniden şablonlayabilmesi veya stilleri yeniden tanım edebilmesi için geçerlidir. Bu nedenle stillerdeki özellik ayarlayıcıları sıradan özelliklere değil yalnızca bağımlılık özelliklerine göre hareket edebilir.

Görsel taslak animasyonlar

Bağımlılık özelliğinin değerine bir storyboard animasyonu kullanarak animasyon ekleyebilirsiniz. Windows Çalışma Zamanı'ndaki görsel taslak animasyonlar yalnızca görsel süslemeler değildir. Animasyonları tek tek özelliklerin veya bir denetimin tüm özellikleri ve görsellerinin değerlerini ayarlayıp zaman içinde bu değerleri değiştirebilen bir durum makinesi tekniği olarak düşünmek daha yararlıdır.

Animasyonu başlatabilmek için, animasyonun hedef özelliği bir bağımlılık özelliği olmalıdır. Ayrıca, animasyonlu olmak için hedef özelliğin değer türü mevcut Zaman Çizelgesi türetilmiş animasyon türlerinden biri tarafından desteklenmelidir. Renk, Double ve Nokta değerleri interpolasyon veya anahtar kare teknikleri kullanılarak animasyonlu hale getirilebilir. Diğer değerlerin çoğu ayrı Nesne anahtar çerçeveleri kullanılarak animasyonlu olabilir.

Animasyon uygulandığında ve çalıştırıldığında, animasyonlu değer özelliğin sahip olduğu herhangi bir değerden (yerel değer gibi) daha yüksek bir önceliğe sahip olarak çalışır. Animasyonlar, görsel olarak durdurulmuş gibi görünse bile animasyonların özellik değerlerine uygulanmasına neden olabilecek isteğe bağlı bir HoldEnd davranışına da sahiptir.

Durum makinesi ilkesi, denetimler için VisualStateManager durum modelinin bir parçası olarak görsel taslak animasyonların kullanılmasıyla somutlaştırılır. Görsel taslak animasyonlar hakkında daha fazla bilgi için bkz. Görsel taslaklı animasyonlar. VisualStateManager ve denetimler için görsel durumların tanımlanması hakkında daha fazla bilgi için Görsel durumlar için taslak animasyonlar veya Denetim şablonları konularına bakın.

Özellik değiştiğinde davranış

Özellik değiştirme davranışı, bağımlılık özelliği terminolojisinin "bağımlılık" bölümünün kaynağıdır. Başka bir özellik ilk özelliğin değerini etkileyemiyorsa bir özellik için geçerli değerlerin korunması birçok çerçevede zor bir geliştirme sorunudur. Windows Çalışma Zamanı özellik sisteminde her bağımlılık özelliği, özellik değeri her değiştiğinde çağrılan bir geri çağırma belirtebilir. Bu geri çağırma, genel olarak zaman uyumlu bir şekilde ilgili özellik değerlerini bildirmek veya değiştirmek için kullanılabilir. Mevcut bağımlılık özelliklerinin birçoğunda özellik değişikliği davranışı vardır. Ayrıca özel bağımlılık özelliklerine benzer geri çağırma davranışı ekleyebilir ve kendi özellik değişikliği geri çağırmalarınızı uygulayabilirsiniz. Örnek için bkz. Özel bağımlılık özellikleri .

Windows 10 , RegisterPropertyChangedCallback yöntemini tanıtır. Bu, dependencyObject örneğinde belirtilen bağımlılık özelliği değiştirildiğinde uygulama kodunun değişiklik bildirimlerine kaydolmasını sağlar.

Varsayılan değer ve ClearValue

Bağımlılık özelliği, özellik meta verilerinin bir parçası olarak tanımlanan varsayılan bir değere sahip olabilir. Bir bağımlılık özelliği için, özellik ilk kez ayarlandıktan sonra varsayılan değeri ilgisiz olmaz. Varsayılan değer, değer önceliğindeki başka bir belirleyici kaybolduğunda çalışma zamanında yeniden uygulanabilir. (Bağımlılık özelliği değeri önceliği sonraki bölümde açıklanmıştır.) Örneğin, bir özellik için geçerli olan bir stil değerini veya animasyonu kasıtlı olarak kaldırabilirsiniz, ancak bunu yaptıktan sonra değerin makul bir varsayılan olmasını istersiniz. Bağımlılık özelliği varsayılan değeri, her özelliğin değerini özel olarak ek bir adım olarak ayarlamaya gerek kalmadan bu değeri sağlayabilir.

Zaten yerel bir değerle ayarladıktan sonra bile bir özelliği kasıtlı olarak varsayılan değere ayarlayabilirsiniz. Bir değeri yeniden varsayılan olarak sıfırlamak ve olağandışı durumlarda, varsayılanı geçersiz kılabilir ancak yerel bir değeri geçersiz kılmayan diğer katılımcıların da etkin olmasını sağlamak için ClearValue yöntemini çağırın (temizlemek istediğiniz özelliği yöntem parametresi olarak belirtin). Özelliğin her zaman varsayılan değeri kullanmasını istemezsiniz, ancak yerel değeri temizlemek ve varsayılan değere geri dönmek, denetim şablonundaki bir stil ayarlayıcıdan gelen değeri kullanmak gibi, şimdi işlem yapmak istediğiniz başka bir öğeyi daha önce etkinleştirebilir.

DependencyObject ve iş parçacığı kullanımı

Tüm DependencyObject örnekleri, Windows Çalışma Zamanı uygulaması tarafından gösterilen geçerli Pencere ile ilişkili UI iş parçacığında oluşturulmalıdır. Her DependencyObject ana kullanıcı arabirimi iş parçacığında oluşturulması gerekse de, DispatcherQueue özelliğine erişilerek nesnelere diğer iş parçacıklarından bir dağıtıcı başvurusu kullanılarak erişilebilir. Ardından TryEnqueue gibi yöntemleri çağırabilir ve ui iş parçacığındaki iş parçacığı kısıtlamaları kuralları içinde kodunuzu yürütebilirsiniz.

Uyarı

UWP uygulamaları için Dispatcher özelliğine erişin. Ardından CoreDispatcher nesnesinde RunAsync gibi yöntemleri çağırabilir ve kodunuzu ui iş parçacığındaki iş parçacığı kısıtlamaları kuralları içinde yürütebilirsiniz. Windows Uygulama SDK'sı için UWP ile WinUI arasındaki farklar hakkında daha fazla bilgi için bkz. İş parçacığı işlevselliği geçişi.

DependencyObject'in iş parçacığı oluşturma yönleri, genellikle yalnızca ui iş parçacığında çalışan kodun bir bağımlılık özelliğinin değerini değiştirebileceği ve hatta okuyabileceği anlamına geldiği için ilgilidir. İş parçacığı sorunları genellikle, zaman uyumsuz desenleri ve arka plan çalışan iş parçacıklarının doğru şekilde kullanıldığı tipik kullanıcı arabirimi kodlarında önlenebilir. Genellikle yalnızca kendi DependencyObject türlerinizi tanımlıyorsanız ve bunları bir DependencyObject için uygun olmayan veri kaynakları veya diğer senaryolarda kullanmayı denediğinizde DependencyObject ile ilgili iş parçacığı sorunlarıyla karşılaşırsınız.

Kavramsal malzeme