Bağımlılık Özelliği Değer Önceliği
Bu konu açıklar nasıl dinamiklerini Windows Presentation Foundation (WPF) özelliği sistem değerini etkileyebilir bir bağımlılık özelliğive önceliği özelliğinin yönlerine göre sistem uygulama etkili bir özelliğin değerini açıklar.
Bu konu aşağıdaki bölümleri içerir.
- Prerequisites
- wpf özellik sistemi
- Bağımlılık Özellikleri "ayarlanabilir" birden fazla yerde
- Bağımlılık özelliği ayarı öncelik listesi
- TemplatedParent
- Style özelliği
- Varsayılan (tema) stiller
- Dinamik kaynağın başvuru ve bağlama
- SetCurrentValue
- Zorlama, animasyonlar ve temel değer
- Tetikleyici davranışlar
- ClearValue ve değer önceliği
- İlgili Konular
Prerequisites
Bu konuda bağımlılık özellikleri varolan bağımlılık özellikleri bir tüketici açısından bakıldığında, anladığınızı varsayar WPF sınıfları ve okuma Bağımlılık Özellikleri Genel Bakış. To follow the examples in this topic, you should also understand Extensible Application Markup Language (XAML) and know how to write WPF applications.
wpf özellik sistemi
WPF Özelliği sistemi sunar bağımlılık özellikleri değerine sahip güçlü bir şekilde çeşitli etkenlere, gerçek zamanlı özelliği doğrulama, geç bağlama ve bildirme değerleri için diğer özellikleri değişiklikleri ilgili özellikleri gibi özellikleri etkinleştirme belirlenecektir Tam sırası ve bağımlılık özellik değerlerini belirlemek için kullanılan mantığı olduğu kabul karmaşık. Bu sırada gereksiz özellik ayarı önlemenize yardımcı olur ve de yukarı karışıklığı temizleyin bilmek tam olarak neden bazı etkileyebilecek veya bağımlılık özelliği değeri tahmin girişimi, beklenen değere neden olacak kadar sona.
Bağımlılık Özellikleri "ayarlanabilir" birden fazla yerde
Aşağıdaki örnek verilebilir XAML burada aynı özelliğe (Background) üç farklı "" ayarlanmış değeri etkileyen işlemleri.
<Button Background="Red">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Green"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Blue" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
Click
</Button>
Burada, hangi renk uygulanır beklediğiniz — kırmızı, yeşil veya mavi?
Animasyonlu değerleri ve zorlama dışında yerel özellik kümeleri en yüksek öncelik ayarlanır. Yerel bir değere ayarlarsanız, değer, hatta tüm stilleri veya Denetim şablonlarını gelecektir emin bekleyebilirsiniz. Örnekte, burada Background kırmızı yerel olarak ayarlayın. Bu nedenle, aksi takdirde bu kapsamda o türdeki tüm öğeleri uygulamak örtülü bir stil olmasına karşın, bu kapsamda tanımlanan stili yapmak için en yüksek önceliği değil Background özelliği, değeri. Bu Button örneğinden kırmızı yerel değerini kaldırdıktan sonra stili önceliği yoktur ve düğme stili arka plan değeri elde. Düğme Fare üzerine ise mavi ve yeşil Aksi takdirde olacak içinde stil, tetikleyiciler, önceliklidir.
Bağımlılık özelliği ayarı öncelik listesi
Aşağıdaki özellik sistemi bağımlılık özellikleri çalışma değerlerini atarken kullandığı aynen sıradır. En yüksek önceliği önce listelenmiştir. Bazı yapılan generalizations bu listeyi genişletir Bağımlılık Özellikleri Genel Bakış.
Özellik sistem zorlama. Zorlama hakkında daha fazla bilgi için bkz zorlama, animasyon ve Bankası değeri bu konuda daha sonra.
Etkin animasyonları veya tutulan davranış animasyonlar. Bu değeri yerel olarak ayarlanmış olsa bile, pratik geçerli olabilmesi için animasyon özelliği temel (unanimated) değeri önceliğe sahip olmalıdır. Ayrıntılı bilgi için bkz: zorlama, animasyon ve Bankası değeri bu konuda daha sonra.
Yerel değeri. Yerel bir değer "kapsayıcı" rahatlığı ayarlanabilir Ayrıca bir öznitelik veya özellik öğe ayarına eşit olur özelliği XAML, ya da bir çağrıyla SetValue API kullanarak bir özelliği belirli bir örneği. Bağlama veya kaynak kullanarak yerel bir değere ayarlarsanız, doğrudan bir değer olarak ayarlanmışsa bu her öncelikleri davranır.
Şablon özelliklerini TemplatedParent. Bir öğenin bir TemplatedParent bir şablonun parçası oluşturulmuşsa, (bir ControlTemplate veya DataTemplate). Ne zaman bu geçerlidir hakkında ayrıntılar için bkz: TemplatedParent bu konuda daha sonra. Şablonu içinde aşağıdaki öncelik uygulanır:
Karşı harekete TemplatedParent şablonu.
Özellik kümeleri (genellikle ile XAML öznitelikleri), TemplatedParent şablonu.
Örtülü stili. Yalnızca için geçerlidir Style özelliği. Style Özelliği herhangi bir stil kaynak türü, eşleşen bir anahtarla dolduruluro öğe. Bu stili kaynak sayfası veya uygulamanın bulunması gerekir; örtülü stili kaynak arama temalar devam etmez.
Stil tetikler. Tetikleyiciler stilleri sayfasından veya uygulama içinde (Bu stilleri doğrudan ya da dolaylı stilleri olabilir, ancak varsayılan stillerinden daha düşük öncelikli olması).
Şablon tetikler. Herhangi bir tetikleyici bir şablonu içinde stil veya doğrudan uygulanan bir şablon.
Stil ayarlayıcılar. Gelen değerleri bir Setter içinde stilleri sayfasından veya uygulama.
(Tema) varsayılan stil. Ne zaman bu uygulanır ve tema stiller tema stiller içinden şablonlara ilişkileri hakkında daha fazla bilgi için bkz: (tema) varsayılan stilleri bu konuda daha sonra. Varsayılan stil içinde aşağıdaki öncelik sırasına göre uygulanır:
Tema stili etkin tetikler.
Tema stilinde ayarlayıcılar.
Devralma. Bunlar özellikle uygulama boyunca her öğe üzerinde ayarlanmaması olduğunu birkaç bağımlılık özellikleri alt öğesi, üst öğeden değerlerine devralır. Ayrıntılar için bkz: Özellik Değeri Kalıtımı.
Bağımlılık özelliği meta veriler varsayılan değeri. Herhangi bir belirli bağımlılık özelliği, o belirli bir özelliğin özellik sistemi kaydı tarafından belirlenen varsayılan bir değer olabilir. Ayrıca, bağımlılık özelliği türetilmiş sınıfları her türü için ayrı ayrı (varsayılan değer dahil) meta verilerin geçersiz kılmak için seçeneğiniz vardır. See Bağımlılık Özelliği Meta Verisi for more information. Önce alınmış bir özellik için varsayılan değer, devralma denetlendiğinden üst öğe varsayılan değeri bir alt öğe üzerinde önceliğe sahiptir. Sonuç olarak, devralınabilir bir özelliği herhangi bir yerde ayarlanmazsa, varsayılan değer olarak kök veya ana belirtilen alt öğesi varsayılan değer yerine kullanılır.
TemplatedParent
TemplatedParent öncelik madde olarak, doğrudan standart uygulama İşaretlemede bildirdiğiniz bir öðenin herhangi bir özelliği için geçerli değildir. Sadece varlığı üzerinden şablonunun uygulama haline gelen alt öğeleri görsel bir ağaç içindeki TemplatedParent kavramı yok. Ne zaman özelliği sistem arar TemplatedParent bir değer için şablon onu arama şablonu, oluşturulan bu öğe. Özellik değerleri TemplatedParent şablon genellikle yerel bir değer olarak alt öğesinde ayarlanmış olan, ancak şablonları potansiyel gruplarınca paylaşıldığından yerel değerini karşı daha az bu önceliği var gibi davranma. For details, see TemplatedParent.
Style özelliği
Biri dışında tüm olası bağımlılık özellikleri daha önce açıklanan arama sırası uygulanır: Style özelliği. Style Özelliği benzersiz, kendisini stilde edemez bakımından 5 ile 8 öncelikli öğeleri geçerli değildir olacak. Ayrıca, animasyon ya da coercing Style önerilmez (ve animasyon Style Özel Animasyon sınıf gerektirecek). Bu üç yol, bırakır, Style özelliği ayarlayın:
Açık stil. Style Özelliğini doğrudan ayarlayın. Çoğu senaryoda stili tanımlanan satır içi değildir, ancak bunun yerine açık anahtarının bir kaynak olarak başvurulur. Bu durumda önceliği madde 3 yerel bir değer üzerindeymiş stil özelliğini davranır.
Örtülü stili. Style Özelliği doğrudan ayarlanmamış. Ancak, Style (sayfa, uygulama) kaynak arama dizisindeki bazı düzeyinde var ve stili olarak uygulanmasını türüyle eşleşen bir kaynak anahtarı kullanarak anahtarlı. Bu durumda, Style özelliğinin kendisini sırası 5 madde olarak tanımlanan bir öncelik olarak davranır. Bu koşul kullanarak algılanabilir DependencyPropertyHelper karşı Style özelliği ve aramakta ImplicitStyleReference sonuçları.
Varsayılan stil, olarak da bilinen tema stili. Style Özelliği ayarlı değil, doğrudan ve aslında okuyun olarak null kadar çalışma zamanı. Bu durumda, stil parçası olan çalışma zamanı tema değerlendirme gelir WPF Sunu altyapısı.
Temalar, örtülü stilleri için türü kesin olarak eşleşmelidir — bir MyButton Button-türetilmiş bir sınıf için bir stil için örtülü olarak kullanmaz Button.
Varsayılan (tema) stiller
İle birlikte gelen her denetim WPF olan bir varsayılan stil. Varsayılan stil bu varsayılan stil potansiyel neden temaya göre değişir bazen bir tema stili olarak adlandırılır.
Bir denetim için bir kurucu olarak tema stili var, Denetim şablon için varsayılan stil içinde bulunan en önemli bilgiler, Template özelliği. Özel bir şablon olarak özel stilin bir bölümü olmayan bir denetim yok şablondan varsayılan stilleri olsaydı, hiçbir görsel görünümünü hiç yoktur. Varsayılan stil şablonu her bir denetimi temel yapısı görünümünü verir ve ayrıca şablon ve karşılık gelen denetim sınıfı görsel ağacında tanımlanan özellikleri arasındaki bağlantıları tanımlar. Her denetim, bir denetimin görünümünü tamamen şablonunu değiştirmeden etkileyen özellikler kümesi sunar. Örneğin, varsayılan görünümünü düşünün bir Thumb bileşeni denetimi, bir ScrollBar.
A Thumb var. bazı özelleştirilebilir özellikler Varsayılan şablonunu bir Thumb temel altöge oluşturur / görsel ağaç birkaç ile iç içe Border Bileşenler oluşturma bir eğim görünebilir. Şablonunun parçası olan bir özellik özelleştirme gösterilmesine izin içinse, Thumb sınıfı tarafından bu özellik eline sonra bir TemplateBinding, şablon içinde. Durumunda, Thumb, bu kenarlıklar çeşitli özelliklerini paylaşan bir şablon bağlama gibi özellikler için Background veya BorderThickness. Ancak belirli bir özellik veya görsel düzenlemeler denetimini şablona kodlanmış veya temayı doğrudan gelir ve tüm şablon değiştirme yetersiz değiştirilemez değerler bağlıdır. Bir özelliği şablonu esas alan bir üst gelir ve şablon bağlama tarafından maruz kalmaz, hedeflemek için kolay bir yolu yoktur çünkü genellikle, bu stiller tarafından düzeltilemez. Ancak bu özellik yine uygulanan şablon özellik değeri kalıtım ya da varsayılan değer etkisinde.
Tema stiller bir tür anahtar tanımları olarak kullanın. Temalar belirli öğeyi örneğine uygulanır, ancak bu tür temalar aramasını denetleyerek gerçekleştirilir DefaultStyleKey özellikte bir denetim. Örtülü stilleri gibi hazýr bilgi türünü kullanarak aksine budur. Değeri DefaultStyleKey Uygulayıcısı (özelliği değiştirme hedeflenen yoludur onu özelliği düzeyinde ancak için bunun yerine varsayılan değer özellik meta verilerde değişiklik geçersiz değil için) bunu değiştirmedi bile türetilmiş sınıflara miras. Bu başvururken, aksi takdirde bir stili olmayan türetilmiş öğeler için tema stilleri tanımlamak temel sınıflar sağlar (veya daha da önemlisi, bir şablonu bu stil içinde yoktur ve dolayısıyla hiçbir varsayılan görünümünü hiç yoktur). Böylece, türetmek MyButton dan Button ve almaya devam Button varsayılan şablonu. Denetim yazarı olsaydı MyButton ve farklı bir davranış istedi, bağımlılık özelliği meta verilerini geçersiz DefaultStyleKey üzerinde MyButton farklı bir anahtar dönün ve sonra da şablon dahil olmak üzere ilgili tema stiller'ı tanımlamak için MyButton , ile paketini sizin MyButton Denetim. Temalar, stilleri ve denetim geliştirme hakkında daha fazla bilgi için bkz: Denetim Yazımına Genel Bakış.
Dinamik kaynağın başvuru ve bağlama
Dinamik kaynağın başvuru ve bağlama işlemleri öncelik sırasında ayarlandıklarından konumunun saygı gösterin. Örneğin, yerel bir değere uygulanan dinamik kaynağın 3 öncelik maddeye göre davranır, öncelik madde 9 ve benzeri bağlama tema stil özelliği ayarlandığı için geçerlidir. Çünkü dinamik kaynağın başvuru ve bağlama gerekir hem de uygulama çalışma zamanı durumundan değerleri elde etmek mümkün, bu gerçek herhangi belirli bir özellik için özellik değeri öncelik belirleme işlemi de çalışma süresi genişletir doğmasına yol açar.
Dinamik kaynağın başvuru Aslýna özelliği sisteminin bir parçası değildir, ancak kendi, yukarıda listelenen sıra ile kurduğu bir arama sırası vardır. Bu öncelik daha kapsamlı olarak belgelenen Kaynaklara Genel Bakış. Bu öncelik temel çizelgelerinin özetidir: Sayfa kök, uygulama, tema, sistem öğesi.
Dinamik kaynakları ve bağlar, burada ayarlanan önceliğe sahiptir, ancak değer ertelenmiş. Bir Bu dinamik kaynağın ayarlayın ya da yerel bir değer bağlama, yerel değeri herhangi bir değişiklik dinamik kaynak veya tamamen bağlama değiştirir yazılmasıdır. Çağırdığınız bile ClearValue yerel olarak belirlenen temizlemek için yöntem değeri, dinamik kaynak veya bağlama değil geri yüklenir. Aslında, çağrısı ClearValue (hazır hiçbir yerel değer ile) bir yerde dinamik kaynak veya bağlama sahip bir özellik, bunlar tarafından temizlenir ClearValue çok çağrı.
SetCurrentValue
SetCurrentValue Yöntemi bir özelliği ayarlamak için başka bir yoludur ancak bu değil sırasına göre önceliği. Bunun yerine, SetCurrentValue , önceki değeri kaynak yazmadan bir özelliğin değerini değiştirmek sağlar Kullanabileceğiniz SetCurrentValue istediğiniz zaman, istediğiniz değeri vererek önceliği olmayan bir değer ayarlamak içinyerel bir değer. Örneğin, bir özellik tetikleyecek ve aracılığıyla başka bir değer atanmış, SetCurrentValue, tetikleyici özelliği sistem hala uyar ve tetikleyici eylem ortaya çıkarsa özelliğini değiştirin. SetCurrentValueözelliğin değeri daha yüksek önceliğe sahip bir kaynak vermeden değiştirmenizi sağlar. Benzer şekilde, kullanabileceğiniz SetCurrentValue yazmadan bir özelliğin değerini değiştirmek içinbağlama.
Zorlama, animasyonlar ve temel değer
Her ikisi de "temel değeri" olarak sunamayacağını bir değer rakamını zorlama ve animasyon Bu SDK. Temel böylece ne değer madde 2 ulaşılıncaya kadar ulaşana kadar öğeler değerlendirmek yoluyla belirlenen değerdir.
Bir animasyonun her ikisini de "" belirtmezse bir animasyon için temel değeri animasyonlu değeri üzerinde bir etkisi olabilir ve "Kime" Belirli davranışlar veya animasyon kasıtlı tamamlandığında temel dönüyor. Bu uygulamada görmek için Çalıştır gelen, için ve animasyon hedef değerlere örnek olarak. Örnekte, yerel değerleri dikdörtgeni yükseklik ayarı herhangi "Kimden" ilk yerel değer farklı şekilde deneyin animasyon. Animasyonlar hemen kullanmaya başlamak Not "Kimden" değerler ve Değiştir Bankası değer bir kez başladı. Animasyon animasyon önce Dur belirterek tamamlandığında bulunan değeri döndürmek için belirtebilir FillBehavior. Daha sonra normal öncelik temel değer belirlenmesi için kullanılır.
Birden çok animasyon tek bir özellik için değer öncelikleri farklı noktalar tanımlanmış büyük olasılıkla bu animasyonları ile uygulanabilir. Ancak bu animasyonlar potansiyel olacak bileşik değerlerine yerine, yalnızca en yüksek önceliği animasyon uygulama. Bu animasyonları tam olarak nasıl tanımlandığını ve hareketli değerin türünü bağlıdır. For more information about animating properties, see Animasyona Genel bakış.
Zorlama tüm en yüksek düzeyinde uygulanır. Zaten çalışan bir animasyon tabi değer zorlama olur. Bazı varolan bağımlılık özelliklerinde WPF sahip yerleşik zorlama. Özel bağımlılık özelliği için özel bağımlılık özelliği için zorlama davranışı kullanarak tanımladığınız bir CoerceValueCallback ve meta verileri, oluşturduğunuz bir parçası olarak geriözellik. Türetilmiş bir sınıf içinde bu özellik meta verilerini geçersiz kılarak, varolan özelliklerin zorlama davranışını da kılabilirsiniz. Zorlama kurduğu zorlama kısıtlamalar uygulanır şekilde temel değeri olan bu kısıtlamalara anda mevcut, ancak temel değeri hala korunur. Bu nedenle, zorlama kısıtlamalar sonraki hareketidir, zorlama en yakın değeri olası o temel değeri döndürür ve tüm kısıtlamalar hareketidir hemen olabilecek özellikte zorlama etkisini durduracak. Zorlama davranış hakkında daha fazla bilgi için bkz: Bağımlılık Özelliği Geri Çağrıları ve Doğrulama.
Tetikleyici davranışlar
Denetimleri, tetikleyici davranışlar genellikle kendi temalarını varsayılan stilde bir parçası olarak tanımlayın. Yerel özellikleri ayarlama denetimleri Tetikleyiciler görsel olarak veya behaviorally kullanıcı odaklı olaylarını yanıtlamak engelleyebilir. En yaygın bir özellik tetikleyici denetimi veya durumu özellikleri gibi kullanılır IsSelected. Örneğin, varsayılan olarak, bir Button devre dışı bırakılır (tetiklemek için IsEnabled olan false) sonra Foreground tema stili değeridir "gri renkte" görünmesini nedeni nedir. Ancak yerel ayarladıysanız Foreground değeri, o normal sınırlı renk olması bile, yerel özellik kümeniz tarafından önceliğinde overruledbu özellik tetikleyen senaryo. Tema düzeyinde tetikleyici Davranışlar, unduly denetimi için hedeflenen kullanıcı deneyimiyle engel olduğundan emin olun ve özelliklerin değerlerini ayarlama dikkatli olun.
ClearValue ve değer önceliği
ClearValue Yöntemi sağlayan bir expedient anlamına gelir arasında yerel olarak uygulanan herhangi bir değer temizlemek bir bağımlılık özelliği öğe ayarlayın. Ancak, arama ClearValue olmayan bir garanti olarak meta veri özelliği kayıt sırasında oluşturulan varsayılan olduğundan yeni etkili değer. Tüm diğer katılımcıların değer önceliğinde hala etkin. Yalnızca yerel olarak ayarlanmış değer öncelik serisinden kaldırılmıştır. Örneğin, arama, ClearValue Burada bu özelliği ayarlanmışsa bir tema stili tarafından bir özellik sonra tema değeri olarak yeni değeri yerine uygulanırmeta veri tabanlı varsayılan. Tüm özellik değeri katılımcılar işlemden alıp kayıtlı meta veriler varsayılan değerini ayarlamak istediğiniz bağımlılık özelliği meta verileri sorgulayarak, varsayılan değer olarak alabilir ve sonra yerel olarak yapılan bir çağrıyla özelliği ayarlamak için varsayılan değer kullanabilirsiniz, SetValue.