Framework özellik meta verileri (WPF .NET)
Bağımlılık özellikleri için çerçeve özelliği meta veri seçeneklerini Windows Presentation Foundation (WPF) çerçeve düzeyinde ayarlayabilirsiniz. WPF sunu API'leri ve yürütülebilir dosyalar işleme ve veri bağlamayı işlediğinde WPF çerçeve düzeyi ataması uygulanır. Sunu API'leri ve yürütülebilir dosyalar bağımlılık özelliğini sorgular FrameworkPropertyMetadata .
Önkoş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.
Çerçeve özelliği meta veri kategorileri
FrameworkPropertyMetadata şu kategorilere ayrılır:
Bir öğenin düzenini etkileyen meta veriler, özellikle AffectsArrange, AffectsMeasureve AffectsRender meta veri bayrakları. Bağımlılık özelliği uygulamanız görsel bir yönü etkiliyorsa ve veya sınıfınızda uyguluyorsanız MeasureOverride ArrangeOverride bu bayrakları ayarlayabilirsiniz.
MeasureOverride
veArrangeOverride
yöntemleri, düzen sistemine uygulamaya özgü davranış ve işleme bilgileri sağlar.AffectsArrange
,AffectsMeasure
veyaAffectsRender
bir bağımlılık özelliğinin meta verilerinde olarak ayarlandığındatrue
ve etkin değeri değiştiğinde, WPF özellik sistemi öğenin görsellerini geçersiz kılma isteği başlatarak yeniden çizim tetikler.Bir öğenin üst öğesinin düzenini etkileyen meta veriler, özellikle AffectsParentArrange ve AffectsParentMeasure meta veri bayrakları. Bu bayrakları ayarlayan WPF bağımlılık özelliklerine örnek olarak ve Paragraph.KeepWithNextverilebilirFixedPage.Left.
Özellik değeri devralma meta verileri, özellikle Inherits ve OverridesInheritanceBehavior meta veri bayrakları. 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. Daha fazla bilgi için bkz . Özellik değeri devralma.
Not
Özellik değerleri bağlamında "devralır" terimi bağımlılık özelliklerine özgüdür ve türetilmiş türler aracılığıyla yönetilen kod türleri ve üye devralma ile doğrudan ilişkili değildir. Bağımlılık özellikleri bağlamında, alt öğelerin üst öğelerden bağımlılık özelliği değerlerini devralabileceği anlamına gelir.
Veri bağlama meta verileri, özellikle BindsTwoWayByDefault ve IsNotDataBindable meta veri bayrakları. Varsayılan olarak, WPF çerçevesindeki bağımlılık özellikleri tek yönlü bağlamayı destekler. Durumu raporlayan ve kullanıcı eylemi tarafından değiştirilebilir özellikler için varsayılan olarak iki yönlü bağlama ayarlamayı göz önünde bulundurun, örneğin IsSelected. Ayrıca, bir denetimin kullanıcıları bir özelliğin uygulamayı beklediğinde ( örneğin TextBox.Text) iki yönlü bağlamayı varsayılan olarak ayarlamayı göz önünde bulundurun.
BindsTwoWayByDefault
yalnızca varsayılan bağlama modunu etkiler. Bağlamanın veri akışı yönünü düzenlemek için Binding.Mode değerini ayarlayın. Kullanım örneği olmadığında veri bağlamayı devre dışı bırakmak için kullanabilirsinizIsNotDataBindable
. Veri bağlamaları hakkında daha fazla bilgi için bkz . Veri bağlamaya genel bakış.Günlük meta verileri, özellikle Journal meta veri bayrağı. bayrağının
Journal
varsayılan değeri yalnızcatrue
gibi SelectedIndexbazı bağımlılık özellikleri içindir. Kullanıcı giriş denetimleri, değerleri depolanması gereken kullanıcı seçimlerini barındıran özellikler için bayrağı ayarlamalıdırJournal
. BayrağıJournal
, WPF günlük oluşturma hizmetleri de dahil olmak üzere günlük kaydı destekleyen uygulamalar veya hizmetler tarafından okunur. Gezinti adımlarını depolama hakkında bilgi için bkz . Gezintiye genel bakış.
FrameworkPropertyMetadata doğrudan öğesinden UIPropertyMetadatatüretilir ve burada açıklanan bayrakları uygular. Özellikle ayarlanmadığı sürece, FrameworkPropertyMetadata
bayrakların varsayılan değeri vardır false
.
Reading FrameworkPropertyMetadata
Bağımlılık özelliğinin meta verilerini almak için tanımlayıcıyı çağırın GetMetadata DependencyProperty . Çağrısı GetMetadata
bir PropertyMetadata
nesne döndürür. Çerçeve meta veri değerlerinin 'e yayınlarını PropertyMetadata
FrameworkPropertyMetadatasorgulamanız gerekiyorsa.
FrameworkPropertyMetadata Belirtme
Bağımlılık özelliğini kaydettiğinizde, buna meta veri oluşturma ve atama seçeneğiniz vardır. Atadığınız meta veri nesnesi veya gibi FrameworkPropertyMetadatatüretilmiş sınıflarından biri olabilirPropertyMetadata. WPF sunu API'lerini ve işleme ve veri bağlama için yürütülebilir dosyaları kullanan bağımlılık özelliklerini seçin FrameworkPropertyMetadata
. Daha gelişmiş bir seçenek, daha fazla bayrak içeren bir özel meta veri raporlama sınıfı oluşturmak için öğesinden FrameworkPropertyMetadata
türetmektir. Veya kullanıcı arabirimi işlemeyi etkileyen çerçeve dışı özellikler için de kullanabilirsiniz UIPropertyMetadata .
Meta veri seçenekleri genellikle yeni bir bağımlılık özelliğinin kaydı sırasında ayarlansa da, bunları veya AddOwner çağrılarında OverrideMetadata yeniden belirtebilirsiniz. Meta verileri geçersiz kılarken, her zaman özellik kaydı sırasında kullanılan meta veri türüyle geçersiz kılın.
tarafından FrameworkPropertyMetadata
kullanıma sunulan özellik özellikleri bazen bayraklar olarak adlandırılır. Örnek FrameworkPropertyMetadata
oluşturuyorsanız bayrak değerlerini doldurmanın iki yolu vardır:
Numaralandırma türünün bir örneğinde FrameworkPropertyMetadataOptions bayrakları ayarlayın.
FrameworkPropertyMetadataOptions
bit düzeyinde VEYA bileşiminde meta veri bayrakları belirtmenize olanak tanır. Ardından, parametresi olanFrameworkPropertyMetadataOptions
bir oluşturucu kullanarak örneğiFrameworkPropertyMetadata
oluşturun ve örneğiniziFrameworkPropertyMetadataOptions
geçirin. Oluşturucuya geçtiktenFrameworkPropertyMetadataOptions
FrameworkPropertyMetadata sonra meta veri bayraklarını değiştirmek için, yeniFrameworkPropertyMetadata
örnekte ilgili özelliği değiştirin. Örneğin, bayrağını ayarlarsanız FrameworkPropertyMetadataOptions.NotDataBindable olarak ayarlayarak FrameworkPropertyMetadata.IsNotDataBindablefalse
bunu geri alabilirsiniz.FrameworkPropertyMetadata
Parametresi olmayanFrameworkPropertyMetadataOptions
bir oluşturucu kullanarak örneği oluşturup geçerli bayrakları üzerindeFrameworkPropertyMetadata
ayarlayınBoolean. ÖrneğiniziFrameworkPropertyMetadata
bir bağımlılık özelliğiyle ilişkilendirmeden önce bayrak değerlerini ayarlayın; aksi takdirde bir InvalidOperationExceptionalırsınız.
Meta veri geçersiz kılma davranışı
Çerçeve özelliği meta verilerini geçersiz kıldığınızda, değiştirilen meta veri değerleri özgün değerlerin yerini alır veya bunlarla birleştirilir:
için PropertyChangedCallback, varsayılan birleştirme mantığı bir tablodaki önceki
PropertyChangedCallback
değerleri korur 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. Devralınan geri çağırmalar yalnızca bir kez çalıştırılır ve bunları meta veriye ekleyen sınıfa aittir.için DefaultValue, yeni değer mevcut varsayılan değerin yerini alır. Geçersiz kılma meta verilerinde bir
DefaultValue
belirtmezseniz ve mevcutta FrameworkPropertyMetadataInherits
bayrak ayarlanmışsa, varsayılan değer meta verilerde belirtilenDefaultValue
en yakın üst bilgiden gelir.için CoerceValueCallback, yeni değer mevcut
CoerceValueCallback
bir değerin yerini alır. Geçersiz kılma meta verilerinde belirtmezsenizCoerceValueCallback
, değer devralma zincirinde belirtilenCoerceValueCallback
en yakın üst bilgiden gelir.Devralınmayan bayraklar için
FrameworkPropertyMetadata
varsayılanfalse
değeri birtrue
değerle geçersiz kılabilirsiniz. Ancak, birtrue
değeri yalnızca , , JournalOverridesInheritanceBehaviorve SubPropertiesDoNotAffectRenderiçin Inheritsbirfalse
değerle geçersiz kılabilirsiniz.
Not
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.
Ayrıca bkz.
.NET Desktop feedback