Bağımlılık özelliği meta verileri (WPF .NET)

Windows Presentation Foundation (WPF) özellik sistemi bir bağımlılık özelliği meta veri raporlama sistemi içerir. Meta veri raporlama sistemi aracılığıyla sağlanan bilgiler, yansıma veya genel ortak dil çalışma zamanı (CLR) özellikleri aracılığıyla sağlananları aşıyor. Bağımlılık özelliğini kaydettiğinizde, buna meta veri oluşturma ve atama seçeneğiniz vardır. Bağımlılık özelliğini tanımlayan bir sınıftan türetilirseniz, devralınan bağımlılık özelliği için meta verileri geçersiz kılabilirsiniz. Sınıfınızı bir bağımlılık özelliğinin sahibi olarak eklerseniz devralınan bağımlılık özelliğinin meta verilerini geçersiz kılabilirsiniz.

Önemli

.NET 7 ve .NET 6 için Masaüstü Kılavuzu belgeleri yapım aşamasındadır.

Ön koşullar

Makalede bağımlılık özellikleri hakkında temel bilgiler edindiğiniz ve Bağımlılık özelliklerine genel bakış makalesini okuduğunuz varsayılır. Bu makaledeki örnekleri takip etmek için Genişletilebilir Uygulama biçimlendirme dili (XAML) hakkında bilgi sahibi olmanız ve WPF uygulamalarının nasıl yazabileceğinizi bilmeniz yardımcı olur.

Meta veriler nasıl kullanılır?

Bağımlılık özelliğinin özelliklerini incelemek için bağımlılık özelliği meta verilerini sorgulayabilirsiniz. Özellik sistemi bir bağımlılık özelliğini işlediğinde meta verilerine erişir. Bağımlılık özelliğinin meta veri nesnesi aşağıdaki bilgi türlerini içerir:

  • Yerel, stil veya devralma değeri gibi başka bir değer uygulanmadığında özellik sistemi tarafından ayarlanan bağımlılık özelliğinin varsayılan değeri. Bağımlılık özelliği değerlerinin çalışma zamanı ataması sırasında değer önceliği hakkında daha fazla bilgi için bkz . Bağımlılık özelliği değeri önceliği.

  • Sahip türündeki zorlama değeri geri çağırmalarına ve özellik değişikliği geri çağırmalarına başvurular. Yalnızca erişim değiştiricisi olan public veya izin verilen erişim kapsamınızda olan geri çağırmalara başvuru alabilirsiniz. Bağımlılık özelliği geri çağırmaları hakkında daha fazla bilgi için bkz . Bağımlılık özelliği geri çağırmaları ve doğrulama.

  • WPF çerçevesi düzeyinde bağımlılık özelliği özellikleri (bağımlılık özelliği bir WPF çerçevesi özelliğiyse). Çerçeve düzeni altyapısı ve özellik devralma mantığı gibi WPF işlemleri WPF çerçeve düzeyinde meta verileri sorgular. Daha fazla bilgi için bkz . Framework özellik meta verileri.

Meta veri API'leri

sınıfı, PropertyMetadata özellik sistemi tarafından kullanılan meta verilerin çoğunu depolar. Meta veri örnekleri şu şekilde oluşturulabilir ve atanabilir:

  • Bağımlılık özelliklerini özellik sistemine kaydeden türler.

  • Bağımlılık özelliğini tanımlayan bir sınıftan devralan türler.

  • Kendilerini bağımlılık özelliğinin sahibi olarak ekleyen türler.

Bir tür meta veri belirtmeden bir bağımlılık özelliğini kaydederse, özellik sistemi bağımlılık özelliğine bu tür için varsayılan değerlere sahip bir PropertyMetadata nesne atar.

Bağımlılık özelliğinin meta verilerini almak için tanımlayıcıdaki GetMetadata aşırı yüklemelerden birini çağırın DependencyProperty . Meta veriler bir PropertyMetadata nesne olarak döndürülür.

'den PropertyMetadatatüretilen daha özel meta veri sınıfları, farklı mimari alanlar için mevcuttur. Örneğin, UIPropertyMetadata animasyon raporlamayı destekler ve FrameworkPropertyMetadata WPF çerçeve özelliklerini destekler. Bağımlılık özellikleri türetilmiş sınıflara PropertyMetadata da kaydedilebilir. Bir nesne döndürse PropertyMetadata deGetMetadata, uygun olduğunda türe özgü özellikleri incelemek için türetilmiş bir türe dönüştürebilirsiniz.

tarafından FrameworkPropertyMetadata kullanıma sunulan özellik özellikleri bazen bayraklar olarak adlandırılır. Bir FrameworkPropertyMetadata örnek oluşturduğunuzda, numaralandırma türünün FrameworkPropertyMetadataOptions bir örneğini oluşturucuya FrameworkPropertyMetadata geçirme seçeneğiniz vardır. FrameworkPropertyMetadataOptions , meta veri bayraklarını bit düzeyinde birleşimde belirtmenize olanak tanır. Oluşturucu FrameworkPropertyMetadata imzasının uzunluğunu makul tutmak için kullanır FrameworkPropertyMetadataOptions . Bağımlılık özelliği kaydındaFrameworkPropertyMetadataOptions, meta veri özelliklerini sorgulamayı daha sezgisel hale getirmek için, ayarladığınız meta veri bayrakları, bayrakların bit düzeyinde bir bileşimi yerine özellikler olarak Boolean kullanıma sunulurFrameworkPropertyMetadata.

Yeni meta veriler geçersiz kılınsın veya oluşturulsun mu?

Bir bağımlılık özelliğini devraldığınızda, meta verilerini geçersiz kılarak bağımlılık özelliğinin özelliklerini değiştirme seçeneğiniz vardır. Ancak, meta verileri geçersiz kılarak bağımlılık özelliği senaryonuzu her zaman gerçekleştiremeyebilirsiniz ve bazen sınıfınızda yeni meta verilerle özel bir bağımlılık özelliği tanımlamanız gerekebilir. Özel bağımlılık özellikleri, WPF türleri tarafından tanımlanan bağımlılık özellikleriyle aynı özelliklere sahiptir. Daha fazla bilgi için bkz . Özel bağımlılık özellikleri.

Geçersiz kılamamanıza neden olan bağımlılık özelliğinin bir özelliği, değer türüdür. Devralınan bir bağımlılık özelliği, ihtiyacınız olan yaklaşık davranışa sahipse ancak senaryonuz farklı bir değer türü gerektiriyorsa, özel bağımlılık özelliği uygulamayı göz önünde bulundurun. Tür dönüştürme veya türetilmiş sınıfınızdaki başka bir uygulama aracılığıyla özellik değerlerini bağlayabilirsiniz.

Meta verileri geçersiz kılma senaryoları

Mevcut bağımlılık özelliği meta verilerini geçersiz kılmaya yönelik örnek senaryolar şunlardır:

  • Yaygın bir senaryo olan varsayılan değeri değiştirme.

  • Devralınan bir bağımlılık özelliğinin diğer bağımlılık özellikleriyle temel uygulamasından farklı bir şekilde etkileşime geçmesi durumunda gerekli olabilecek özellik değişikliği geri çağırmalarını değiştirme veya ekleme. Hem kod hem de işaretlemeyi destekleyen bir programlama modelinin özelliklerinden biri, özellik değerlerinin herhangi bir sırada ayarlanabilmesidir. Bu faktör, özellik değişikliği geri çağırmalarını uygulama şeklinizi etkileyebilir. Daha fazla bilgi için bkz . Bağımlılık özelliği geri çağırmaları ve doğrulama.

  • WPF çerçevesi özellik meta veri seçeneklerini değiştirme. Meta veri seçenekleri genellikle yeni bir bağımlılık özelliğinin kaydı sırasında ayarlanır, ancak bunları veya AddOwner çağrılarında OverrideMetadata yeniden belirtebilirsiniz. Çerçeve özellik meta verilerini geçersiz kılma hakkında daha fazla bilgi için bkz . FrameworkPropertyMetadata Belirtme. Bir bağımlılık özelliğini kaydederken çerçeve özelliği meta veri seçeneklerini ayarlama hakkında bilgi için bkz . Özel bağımlılık özellikleri.

Dekont

Doğrulama geri çağırmaları meta verilerin bir parçası olmadığından, meta veriler geçersiz kılınarak değiştirilemez. Daha fazla bilgi için bkz . Doğrulama değeri geri çağırmaları.

Meta verileri geçersiz kılma

Yeni bir bağımlılık özelliği uygularken yönteminin aşırı yüklemelerini Register kullanarak meta verilerini ayarlayabilirsiniz. Sınıfınız bir bağımlılık özelliğini devralıyorsa, yöntemini kullanarak devralınan OverrideMetadata meta veri değerlerini geçersiz kılabilirsiniz. Örneğin, türüne özgü değerleri ayarlamak için kullanabilirsiniz OverrideMetadata . Daha fazla bilgi ve kod örnekleri için bkz . Bağımlılık özelliği için meta verileri geçersiz kılma.

WPF bağımlılık özelliğine örnek olarak verilmiştir Focusable. FrameworkElement sınıfı kaydederFocusable. Control sınıfı öğesinden FrameworkElementtüretilir, bağımlılık özelliğini devralır Focusable ve devralınan özellik meta verilerini geçersiz kılar. Geçersiz kılma, varsayılan özellik değerini olarak falsetruedeğiştirir, ancak diğer devralınan meta veri değerlerini korur.

Mevcut bağımlılık özelliklerinin çoğu sanal özellikler olmadığından devralınan uygulamaları mevcut üyeyi gölgeler. Bir meta veri özelliğini geçersiz kıldığınızda, yeni meta veri değeri özgün değerin yerini alır veya birleştirilir:

  • için DefaultValue, yeni değer mevcut varsayılan değerin yerini alır. Geçersiz kılma meta verilerinde belirtmezseniz DefaultValue , değer meta verilerde belirtilen DefaultValue en yakın üst bilgiden gelir.

  • için PropertyChangedCallback, varsayılan birleştirme mantığı bir tablodaki tüm PropertyChangedCallback değerleri depolar ve tümü bir özellik değişikliğinde çağrılır. Geri çağırma sırası, hiyerarşideki temel sınıf tarafından kaydedilen bir geri çağırmanın ilk olarak çalıştırıldığı sınıf derinliğine göre belirlenir.

  • için CoerceValueCallback, yeni değer mevcut CoerceValueCallback değerin yerini alır. Geçersiz kılma meta verilerinde belirtmezseniz CoerceValueCallback , değer meta verilerde belirtilen CoerceValueCallback en yakın üst bilgiden gelir.

Dekont

Varsayılan birleştirme mantığı yöntemi tarafından Merge uygulanır. Bir bağımlılık özelliğini devralan türetilmiş bir sınıfta, bu sınıfta geçersiz kılarak Merge özel birleştirme mantığı belirtebilirsiniz.

Sahip olarak sınıf ekleme

Farklı bir sınıf hiyerarşisinde kayıtlı bir bağımlılık özelliğini "devralmak" için yöntemini kullanın AddOwner . Bu yöntem genellikle, ekleme sınıfı bağımlılık özelliğini kaydeden türden türetildiğinde kullanılır. Çağrısında AddOwner , ekleme sınıfı devralınan bağımlılık özelliği için türe özgü meta veriler oluşturabilir ve atayabilir. Kod ve işaretleme yoluyla özellik sisteminde tam katılımcı olmak için, ekleme sınıfı şu genel üyeleri uygulamalıdır:

  • Bağımlılık özelliği tanımlayıcı alanı. Bağımlılık özelliği tanımlayıcısının değeri, çağrının AddOwner dönüş değeridir. Bu alan türünde DependencyPropertybir public static readonly alan olmalıdır.

  • ve set erişimcileri get uygulayan bir CLR sarmalayıcısı. Özellik sarmalayıcı kullanarak, bağımlılık özelliklerinin tüketicileri diğer CLR özellikleri gibi bağımlılık özelliği değerlerini alabilir veya ayarlayabilir. get ve set erişimcileri, bağımlılık özelliği tanımlayıcısını parametre olarak geçirerek ve DependencyObject.SetValue çağrıları aracılığıyla DependencyObject.GetValue temel alınan özellik sistemiyle etkileşim kurar. Sarmalayıcıyı, özel bağımlılık özelliğini kaydederken yaptığınız gibi uygulayın. Daha fazla bilgi için bkz. Özel bağımlılık özellikleri

çağıran AddOwner bir sınıf, devralınan bağımlılık özelliğinin nesne modelini yeni bir özel bağımlılık özelliğini tanımlayan bir sınıfla ortaya çıkarmak için aynı gereksinimlere sahiptir. Daha fazla bilgi için bkz . Bağımlılık özelliği için sahip türü ekleme.

Eklenen özellik meta verileri

WPF'de, WPF türlerindeki kullanıcı arabirimiyle ilgili ekli özelliklerin çoğu bağımlılık özellikleri olarak uygulanır. Bağımlılık özellikleri olarak uygulanan ekli özellikler, türetilmiş sınıfların geçersiz kılabileceği meta veriler gibi bağımlılık özelliği kavramlarını destekler. Ekli bir özelliğin meta verileri genellikle bağımlılık özelliğinden farklı değildir. Geçersiz kılma sınıfının örneklerinde devralınan ekli özellik için varsayılan değeri, özellik değişikliği geri çağırmalarını ve WPF çerçevesi özelliklerini geçersiz kılabilirsiniz. Daha fazla bilgi için bkz . Ekli özellik meta verileri

Dekont

Meta verilerde belirttiğiniz Inherits özellikleri kaydetmek için her zaman kullanınRegisterAttached. Özellik değeri devralma, eklenmemiş bağımlılık özellikleri için çalışıyor gibi görünse de, çalışma zamanı ağacındaki belirli nesne-nesne bölmeleri aracılığıyla eklenmemiş bir özelliğin değer devralma davranışı tanımlanmamıştır. Özelliği, Inherits eklenmemiş özelliklerle ilgili değildir. Daha fazla bilgi için bkz RegisterAttached(String, Type, Type, PropertyMetadata). ve öğesinin açıklamalar bölümü Inherits.

Ekli özelliğin sahibi olarak sınıf ekleme

Ekli bir özelliği başka bir sınıftan devralmak, ancak sınıfınızda eklenmemiş bağımlılık özelliği olarak kullanıma açmak için:

  • Sınıfınızı ekli bağımlılık özelliğinin sahibi olarak eklemek için çağrısı AddOwner yapın.

  • Bağımlılık özellik tanımlayıcısı AddOwner olarak kullanmak üzere bir alana çağrının public static readonly dönüş değerini atayın.

  • Özelliği sınıf üyesi olarak ekleyen ve eklenmemiş özellik kullanımını destekleyen bir CLR sarmalayıcı tanımlayın.

Ayrıca bkz.