Aracılığıyla paylaş


Bağımlılık özelliği meta verileri

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.

Önkoşullar

Bağımlılık özellikleri hakkında temel bilgilere sahip olduğunuz ve Bağımlılık Özelliklerine Genel Bakış'ı okuduğunuz varsayılmaktadı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ğer önceliği.

  • Sahip türündeki zorlama değeri geri çağırmaları ve özellik değişikliği geri çağırmaları referansları. Yalnızca public erişim değiştiricisine sahip veya izin verilen erişim kapsamınızda bulunan geri çağırma referanslarını 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

PropertyMetadata sınıfı, ö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.

  • Bağımlılık özelliğinin sahibi olarak kendilerini 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 nesnesi atar.

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

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

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

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

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.

Bağımlılık özelliğinin değiştirilemeyen bir niteliğ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ğlılık özelliği geri çağırma ve doğrulama.

  • WPF çerçevesi özellik meta verileri 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ı OverrideMetadata veya AddOwner çağrılarında yeniden belirtebilirsiniz. Çerçeve özellik meta verilerini geçersiz kılma hakkında daha fazla bilgi için, FrameworkPropertyMetadatabelirtme kısmına bakınız. 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.

Uyarı

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. Geçerlilik değeri geri çağırmaları.

Meta verileri geçersiz kılma

Yeni bir bağımlılık özelliği uygularken, Register yönteminin aşırı yüklemelerini kullanarak meta verilerini ayarlayabilirsiniz. Sınıfınız bir bağımlılık özelliğini devralıyorsa, OverrideMetadata yöntemini kullanarak devralınan meta veri değerlerini geçersiz kılabilirsiniz. Örneğin, türe özgü değerleri ayarlamak için OverrideMetadata kullanabilirsiniz. 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 Focusable. FrameworkElement sınıfı Focusablekaydeder. Control sınıfı FrameworkElement'den türetilmiştir, Focusable bağımlılık özelliğini devralır ve devralınan özellik meta verilerini geçersiz kılar. Geçersiz kılma, varsayılan özellik değerini falsetrueolarak değ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:

  • DefaultValueiçin, yeni değer mevcut varsayılan değerin yerini alır. Geçersiz kılma verilerinde bir DefaultValue belirtmezseniz, değer meta verilerinde DefaultValue belirten en yakın üstten gelir.

  • bir PropertyChangedCallbackiçin, varsayılan birleştirme mantığı tüm PropertyChangedCallback değerlerini bir tabloda 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.

  • CoerceValueCallbackiçin, yeni değer mevcut CoerceValueCallback değerinin yerini alır. Geçersiz kılma verilerinde bir CoerceValueCallback belirtmezseniz, değer meta verilerinde CoerceValueCallback belirten en yakın üstten gelir.

Uyarı

Varsayılan birleştirme mantığı Merge yöntemi tarafından uygulanır. Bağımlılık özelliğini devralan türetilmiş bir sınıfta özel birleştirme mantığı belirtmek için, bu sınıfta Merge metodunu geçersiz kılabilirsiniz.

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 AddOwner yöntemini kullanın. Bu yöntem genellikle, ekleme sınıfı bağımlılık özelliğini kaydeden türden türetilmediğinde kullanılır. AddOwner çağrısında, 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, AddOwner çağrısının dönüş değeridir. Bu alan, public static readonlytüründe bir DependencyProperty alanı olmalıdır.

  • get ve set erişimcilerini 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 DependencyObject.GetValue ve DependencyObject.SetValue çağrıları aracılığıyla 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

AddOwner çağıran 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. Miras alınmış ekli özellik için varsayılan değeri, özellik değişikliği geri çağırmalarını ve WPF çerçeve özelliklerini, geçersiz kılma işlemi yapılan sınıf örneklerinde geçersiz kılabilirsiniz. Daha fazla bilgi için bkz. Ekli özellik meta verileri

Uyarı

Meta verilerde RegisterAttached belirtilmişse, özellikleri kaydetmek için her zaman Inherits kullanın. Ö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. Inherits özelliği, bağlantısız özellikler için geçerli değildir. Daha fazla bilgi için, RegisterAttached(String, Type, Type, PropertyMetadata)bölümüne ve Inheritsaçıklamalar bölümüne bakın.

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 AddOwner çağırın.

  • bağımlılık özelliği tanımlayıcısı olarak kullanmak üzere AddOwner çağrısının dönüş değerini bir public static readonly alanına 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 bakınız