Çerçeve Özelliği Meta Verileri
Windows Presentation Foundation (WPF) mimarisinde WPF çerçeve düzeyinde olduğu kabul edilen nesne öğelerinin özellikleri için çerçeve özelliği meta veri seçenekleri bildirilir. Genel olarak WPF çerçeve düzeyi ataması işleme, veri bağlama ve özellik sistemi iyileştirmeleri gibi özelliklerin WPF sunu API'leri ve yürütülebilir dosyaları tarafından işlenmesini gerektirir. Çerçeve özellik meta verileri, belirli öğe özelliklerinin özelliğe özgü özelliklerini belirlemek için bu sistemler tarafından sorgulanır.
Ön koşullar
Bu konu başlığında, Windows Presentation Foundation (WPF) sınıflarında var olan bağımlılık özelliklerinin tüketicisi açısından bağımlılık özelliklerini anladığınız ve Bağımlılık Özelliklerine Genel Bakış'ı okuduğunuz varsayılır. Bağımlılık Özelliği Meta Verileri'nin de okunması gerekir.
Framework Özellik Meta Verileri tarafından İletilenler
Çerçeve özelliği meta verileri aşağıdaki kategorilere ayrılabilir:
Bir öğeyi (AffectsArrange, AffectsMeasure, AffectsRender) etkileyen raporlama düzeni özellikleri Özelliği ilgili yönleri etkiliyorsa ve ayrıca düzen sistemine belirli işleme davranışı ve bilgileri sağlamak için sınıfınızdaki yöntemleri uyguluyorsanız MeasureOverride / ArrangeOverride , meta verilerde bu bayrakları ayarlayabilirsiniz. Genellikle, böyle bir uygulama özellik meta verilerinde bu düzen özelliklerinden herhangi birinin doğru olduğu bağımlılık özelliklerinde özellik geçersiz kılmalarını denetler ve yalnızca bu geçersiz kılmalar yeni bir düzen geçişi istemeyi gerektirir.
Bir öğenin üst öğesini (AffectsParentArrange, AffectsParentMeasure) etkileyen raporlama düzeni özellikleri. Bu bayrakların varsayılan olarak ayarlandığı bazı örnekler ve Paragraph.KeepWithNextşeklindedirFixedPage.Left.
Inherits. Varsayılan olarak, bağımlılık özellikleri değerleri devralmaz. OverridesInheritanceBehavior devralma yolunun bazı denetim oluşturma senaryoları için gerekli olan görsel bir ağaca da seyahat etmesini sağlar.
Dekont
Özellik değerleri bağlamında "devralır" terimi, bağımlılık özelliklerine özgü bir şey anlamına gelir; bu, wpf özellik sisteminin WPF çerçeve düzeyi özelliği nedeniyle alt öğelerin üst öğelerden gerçek bağımlılık özellik değerini devralabileceği anlamına gelir. Yönetilen kod türü ve türetilmiş türler aracılığıyla üye devralma ile doğrudan hiçbir ilgisi yoktur. Ayrıntılar için bkz . Özellik Değeri Devralma.
Raporlama veri bağlama özellikleri (IsNotDataBindable, BindsTwoWayByDefault). Varsayılan olarak, çerçevedeki bağımlılık özellikleri tek yönlü bağlama davranışıyla veri bağlamayı destekler. Herhangi bir senaryo yoksa veri bağlamayı devre dışı bırakabilirsiniz (esnek ve genişletilebilir olmaları amaçlandığından, varsayılan WPF API'lerinde bu tür özelliklere çok fazla örnek yoktur). Bağlamayı, bir denetimin davranışlarını bileşen parçaları arasında bir araya getiren (IsSubmenuOpen örnektir) veya iki yönlü bağlamanın kullanıcılar için yaygın ve beklenen senaryo olduğu özellikler için iki yönlü bir varsayılan değere sahip olacak şekilde ayarlayabilirsiniz (Text örnektir). Veri bağlamayla ilgili meta verilerin değiştirilmesi yalnızca varsayılanı etkiler; varsayılan her zaman değiştirilebilir bağlama temelinde. Bağlama modları ve bağlama hakkında genel ayrıntılar için bkz . Veri Bağlamaya Genel Bakış.
Özelliklerin günlük kaydı () özelliğini destekleyen uygulamalar veya hizmetler tarafından günlüğe kaydedilip kaydedilmeyeceğini raporlamaJournal. Genel öğeler için günlük kaydı varsayılan olarak etkinleştirilmez, ancak belirli kullanıcı giriş denetimleri için seçmeli olarak etkinleştirilir. Bu özellik, günlük kaydı WPF uygulaması da dahil olmak üzere günlük hizmetleri tarafından okunması amaçlanmıştır ve genellikle gezinti adımları arasında kalıcı olması gereken listelerdeki kullanıcı seçimleri gibi kullanıcı denetimlerinde ayarlanır. Günlük hakkında bilgi için bkz . Gezintiye Genel Bakış.
Reading FrameworkPropertyMetadata
Yukarıda bağlanan özelliklerin her biri, öğesinin anlık temel sınıfına UIPropertyMetadataeklediği belirli özelliklerdirFrameworkPropertyMetadata. Bu özelliklerin her biri varsayılan olarak olacaktır false
. Bu özelliklerin değerini bilmenin önemli olduğu bir özellik için meta veri isteği, döndürülen meta verileri FrameworkPropertyMetadataöğesine atamayı ve sonra gerektiğinde tek tek özelliklerin değerlerini denetlemeyi denemelidir.
Meta Verileri Belirtme
Meta verileri yeni bir bağımlılık özelliği kaydına uygulamak amacıyla yeni bir meta veri örneği oluşturduğunuzda, hangi meta veri sınıfını kullanacağınızı tercih edebilirsiniz: temel PropertyMetadata veya gibi FrameworkPropertyMetadatatüretilmiş bir sınıf. Genel olarak, özellikle özelliğinizin düzen ve veri bağlama gibi özellik sistemi ve WPF işlevleriyle herhangi bir etkileşimi varsa kullanmanız FrameworkPropertyMetadatagerekir. Daha karmaşık senaryolar için bir diğer seçenek de kendi meta veri raporlama sınıfınızı kendi üyelerinde taşınan ek bilgilerle oluşturmak için öğesinden FrameworkPropertyMetadata türetmektir. Ya da uygulamanızın özellikleri için destek derecesini iletmek için veya UIPropertyMetadata kullanabilirsinizPropertyMetadata.
Mevcut özellikler (AddOwner veya OverrideMetadata çağrı) için, her zaman özgün kayıt tarafından kullanılan meta veri türüyle geçersiz kılmanız gerekir.
Bir FrameworkPropertyMetadata örnek oluşturuyorsanız, bu meta verileri çerçeve özellik özelliklerini bildiren belirli özelliklere ilişkin değerlerle doldurmanın iki yolu vardır:
Parametreye FrameworkPropertyMetadata izin veren
flags
oluşturucu imzasını kullanın. Bu parametre, numaralandırma bayraklarının istenen tüm birleşik değerleriyle FrameworkPropertyMetadataOptions doldurulmalıdır.parametre olmadan
flags
imzalardan birini kullanın ve ardından istenen her özellik değişikliği için her raporlama Boole özelliğini olarak FrameworkPropertyMetadatatrue
ayarlayın. Bunu yaparsanız, bu bağımlılık özelliğine sahip öğeler oluşturmadan önce bu özellikleri ayarlamanız gerekir; Boole özellikleri, parametresinden kaçınmaflags
ve meta verileri doldurmaya devam etme davranışına izin vermek için okuma-yazma özelliğidir, ancak özellik kullanılmadan önce meta verilerin etkili bir şekilde mühürlenmesi gerekir. Bu nedenle, meta veriler istendikten sonra özellikleri ayarlamaya çalışmak geçersiz bir işlem olacaktır.
Framework Özelliği Meta Veri Birleştirme Davranışı
Çerçeve özelliği meta verilerini geçersiz kıldığınızda, farklı meta veri özellikleri birleştirilir veya değiştirilir.
PropertyChangedCallback birleştirilir. Yeni PropertyChangedCallbackbir eklerseniz, bu geri arama meta verilerde depolanır. Geçersiz kılmada bir PropertyChangedCallback belirtmezseniz, değeri PropertyChangedCallback meta verilerde bunu belirten en yakın atadan bir başvuru olarak yükseltilir.
için PropertyChangedCallback gerçek özellik sistemi davranışı, hiyerarşideki tüm meta veri sahipleri için uygulamaların saklanması ve bir tabloya eklenmesidir ve özellik sistemi tarafından yürütme sırası en derinden türetilmiş sınıfın geri çağırmalarının ilk olarak çağrılmasıdır. Devralınan geri çağırmalar yalnızca bir kez çalıştırılır ve bunları meta veriye yerleştiren sınıfa ait olarak sayılır.
DefaultValue değiştirilir. Geçersiz kılmada belirtmezseniz PropertyChangedCallback değeri DefaultValue , meta verilerde bunu belirten en yakın atadan gelir.
CoerceValueCallback uygulamaları değiştirilir. Yeni CoerceValueCallbackbir eklerseniz, bu geri arama meta verilerde depolanır. Geçersiz kılmada bir CoerceValueCallback belirtmezseniz, değeri CoerceValueCallback meta verilerde bunu belirten en yakın atadan bir başvuru olarak yükseltilir.
Özellik sistemi davranışı, yalnızca CoerceValueCallback anlık meta verilerdeki öğesinin çağrılmasıdır. Hiyerarşideki diğer CoerceValueCallback uygulamalara başvuru korunmaz.
Numaralandırma bayrakları FrameworkPropertyMetadataOptions bit düzeyinde OR işlemi olarak birleştirilir. belirtirseniz FrameworkPropertyMetadataOptions, özgün seçeneklerin üzerine yazılmaz. Bir seçeneği değiştirmek için ilgili özelliği üzerinde FrameworkPropertyMetadataayarlayın. Örneğin, özgün FrameworkPropertyMetadata nesne bayrağı ayarlarsa FrameworkPropertyMetadataOptions.NotDataBindable , olarak ayarlayarak FrameworkPropertyMetadata.IsNotDataBindable
false
bunu değiştirebilirsiniz.
Bu davranış tarafından Mergeuygulanır ve türetilmiş meta veri sınıflarında geçersiz kılınabilir.
Ayrıca bkz.
.NET Desktop feedback