Özellik Değeri Kalıtımı

Özellik değeri devralma, Windows Presentation Foundation (WPF) özellik sisteminin bir özelliğidir. Özellik değeri devralma, bir öğe ağacındaki alt öğelerin belirli bir özelliğin değerini üst öğelerden almasını ve bu değeri en yakın üst öğede herhangi bir yerde ayarlandığı gibi devralmalarını sağlar. Üst öğe, değerini özellik değeri devralma yoluyla da almış olabilir, bu nedenle sistem büyük olasılıkla sayfa köküne kadar yinelemede bulunur. Özellik değeri devralma varsayılan özellik sistemi davranışı değildir; özelliğin alt öğelerde özellik değeri devralmayı başlatmasına neden olmak için belirli bir meta veri ayarıyla bir özellik oluşturulmalıdır.

Özellik Değeri Devralma, Kapsama Devralmadır

Burada terim olarak "Devralma", türetilmiş sınıfların temel sınıflarından üye tanımlarını devraldığı türler ve genel nesne odaklı programlama bağlamında devralma ile tam olarak aynı kavram değildir. Devralma anlamı WPF'de de etkindir: Çeşitli temel sınıflarda tanımlanan özellikler, öğe olarak kullanıldığında türetilmiş XAML sınıfları için öznitelik olarak sunulur ve kod için üye olarak sunulur. Özellik değeri devralma özellikle özellik değerlerinin bir öğe ağacı içindeki üst-alt ilişkiler temelinde bir öğeden diğerine nasıl devralabileceğiyle ilgilidir. XAML işaretlemesinde uygulama tanımlarken öğeleri diğer öğelerin içine yerleştirdiğinizde bu öğe ağacı en doğrudan görünür. Nesne ağaçları, belirlenen diğer nesne koleksiyonlarına nesneler eklenerek program aracılığıyla da oluşturulabilir ve özellik değeri devralma işlemi, çalışma zamanında tamamlanan ağaçta aynı şekilde çalışır.

Özellik Değeri Devralma Pratik Uygulamaları

WPF API'leri, özellik devralmayı etkinleştirmiş çeşitli özellikler içerir. Genellikle, bunların senaryosu, özelliğin sayfa başına yalnızca bir kez ayarlanmasının uygun olduğu, ancak bu özelliğin aynı zamanda temel öğe sınıflarından birinin üyesi olduğu ve bu nedenle alt öğelerin çoğunda da mevcut olacağı bir özellik içermeleridir. Örneğin, FlowDirection özelliği hangi yönde akışlı içeriğin sayfada sunulması ve düzenlenmesi gerektiğini denetler. Genellikle, metin akışı kavramının tüm alt öğelerde tutarlı bir şekilde işlenmesini istersiniz. Akış yönü bir nedenden dolayı öğe ağacının bir düzeyinde kullanıcı veya ortam eylemine göre sıfırlandıysa, genellikle tüm bu işlem boyunca sıfırlanmalıdır. FlowDirection özelliği devralınacak şekilde yapıldığında, değerin uygulamadaki her sayfanın sunu gereksinimlerini kapsayan öğe ağacında yalnızca bir kez ayarlanması veya sıfırlanması gerekir. İlk varsayılan değer bile bu şekilde devralınır. Özellik değeri devralma modeli, tek tek öğelerin akış yönlerinin bir karışımının kasıtlı olduğu nadir durumların değerini sıfırlamasına olanak sağlar.

Özel Özelliği Devralınabilir Hale Getirme

Özel özelliğin meta verilerini değiştirerek kendi özel özelliklerinizi devralınabilir hale getirebilirsiniz. Ancak, bir özelliği devralınabilir olarak belirlemenin bazı performans konuları olduğunu unutmayın. Bu özelliğin yerleşik bir yerel değere veya stiller, şablonlar veya veri bağlama aracılığıyla alınan bir değere sahip olmadığı durumlarda, devralınabilir bir özellik mantıksal ağaçtaki tüm alt öğelere atanmış özellik değerlerini sağlar.

Bir özelliğin değer devralmaya katılmasını sağlamak için, Ekli Özelliği Kaydetme bölümünde açıklandığı gibi özel bir ekli özellik oluşturun. özelliğini meta verilerle (FrameworkPropertyMetadata) kaydedin ve bu meta veriler içindeki seçenekler ayarlarında "Devralır" seçeneğini belirtin. Ayrıca özelliğin varsayılan olarak belirlenmiş bir değeri olduğundan emin olun çünkü bu değer artık devralınır. Özelliği ekli olarak kaydetmiş olmanıza rağmen, aynı "eklenmemiş" bağımlılık özelliğinde yaptığınız gibi sahip türünde get/set erişimi için bir "sarmalayıcı" özelliği de oluşturmak isteyebilirsiniz. Bunu yaptıktan sonra devralınabilir özellik, sahip türü veya türetilmiş türler üzerinde doğrudan özellik sarmalayıcı kullanılarak ayarlanabilir veya herhangi bir DependencyObjectüzerinde ekli özellik söz dizimi kullanılarak ayarlanabilir.

Eklenen özellikler kavramsal olarak genel özelliklere benzer; herhangi bir DependencyObject değer olup olmadığını denetleyebilirsiniz ve geçerli bir sonuç alabilirsiniz. Ekli özelliklerin tipik senaryosu, alt öğelerde özellik değerleri ayarlamaktır ve söz konusu özellik her zaman ağaçtaki her öğede (DependencyObject) örtük olarak ekli özellik olarak bulunan ekli bir özellikse bu senaryo daha etkilidir.

Dekont

Ö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 öğe sınırları aracılığıyla eklenmemiş bir özelliğin devralma davranışı tanımlanmamıştır. Meta verilerde belirttiğiniz Inherits özellikleri kaydetmek için her zaman kullanınRegisterAttached.

Ağaç Sınırları Boyunca Özellik Değerlerini Devralma

Özellik devralma, öğe ağacından geçiş yaparak çalışır. Bu ağaç genellikle mantıksal ağaçla paraleldir. Ancak, işaretlemeye, gibi Brushbir öğe ağacı tanımlayan wpf çekirdek düzeyinde bir nesne eklediğinizde, kesintili bir mantıksal ağaç oluşturmuşsunuzdur. Mantıksal ağaç WPF çerçeve düzeyi bir kavram olduğundan, gerçek bir mantıksal ağaç kavramsal olarak aracılığıyla Brushgenişletilmez. Yöntemlerini kullanırken bunun sonuçlara yansıtılmış olduğunu LogicalTreeHelpergörebilirsiniz. Ancak, özellik değeri devralma mantıksal ağaçtaki bu boşluğu köprüleyebilir ve devralınabilir özellik ekli bir özellik olarak kaydedildiği ve devralmayı engelleyen bir sınırla (örneğin Frame) karşılaşılmadığı sürece devralınan değerleri geçirebilir.

Ayrıca bkz.