Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows Presentation Foundation (WPF) özellik sisteminin çalışmaları bağımlılık özelliğinin değerini etkiler. Bu makalede WPF özellik sistemindeki farklı özellik tabanlı girişlerin önceliklerinin bağımlılık özelliğinin etkin değerini nasıl belirlediğini açıklar.
Ö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.
WPF özellik sistemi
WPF özellik sistemi, bağımlılık özelliklerinin değerini belirlemek için gerçek zamanlı özellik doğrulama, geç bağlama ve ilgili özellikler için özellik değişikliği bildirimleri gibi çeşitli faktörler kullanır. Bağımlılık özelliği değerlerini belirlemek için kullanılan sıra ve mantık karmaşık olsa da, bunun öğrenilmesi gereksiz özellik ayarlarından kaçınmanıza ve bağımlılık özelliği ayarlama girişiminin neden beklenen değerle sonuçlanmadığına karar vermenize yardımcı olabilir.
Birden çok yerde ayarlanan bağımlılık özellikleri
Aşağıdaki XAML örneği, düğmenin Background özelliğindeki üç farklı "küme" işleminin değerini nasıl etkileyebileceğini gösterir.
<StackPanel>
<StackPanel.Resources>
<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}"
BorderBrush="{TemplateBinding BorderBrush}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</StackPanel.Resources>
<Button Template="{StaticResource ButtonTemplate}" Background="Red">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Blue"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Yellow" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
Which color do you expect?
</Button>
</StackPanel>
Örnekte, Background özelliği Red olarak yerel olarak ayarlanmıştır. Ancak, Background özelliğini Blue olarak ayarlamaya çalışan butonun kapsamındaki örtük stil. Fare düğmenin üzerindeyken, örtük stil içinde tetikleyici, Background özelliğini Yellow olarak ayarlamaya çalışır. Zorlama ve animasyon dışında, yerel olarak ayarlanmış bir özellik değeri en yüksek önceliğe sahiptir, bu nedenle düğme fare üzerinde bile kırmızı olur. Ancak, düğmeden yerel olarak ayarlanan değeri kaldırırsanız, o zaman Background değerini stilden alır. Bir stilde tetikleyiciler önceliklidir, bu nedenle düğme fare üzerinde sarı, aksi takdirde mavi olur. Varsayılan şablon sabit kodlanmış bir fare geçişi ControlTemplate değerine sahip olduğundan, örnek düğmenin varsayılan Background değerinin yerini alır.
Bağımlılık özelliği öncelik listesi
Aşağıdaki liste, özellik sisteminin bağımlılık özelliklerine çalışma zamanı değerleri atarken kullandığı kesin öncelik sırasıdır. En yüksek öncelik önce listelenir.
Mülkiyet sistemi zorlama. Zorlama hakkında daha fazla bilgi için bkz. Zorlama ve animasyonlar.
Etkin animasyonlar veya Bekletme davranışına sahip animasyonlar. Pratik bir etkiye sahip olmak için, temel değer yerel olarak ayarlanmış olsa bile animasyon değerinin temel (animasyonsuz) değerden öncelikli olması gerekir. Daha fazla bilgi için bkz. Zorlama ve animasyonlar.
Yerel değerler. Bir "sarmalayıcı" özelliği aracılığıyla, XAML'de bir öznitelik veya özellik öğesi ayarlamak ya da belirli bir örneğin özelliğini kullanarak SetValue API'sine çağrı yapmak suretiyle yerel bir değer ayarlayabilirsiniz. Bağlama veya kaynak aracılığıyla ayarlanan yerel bir değer, doğrudan ayarlanmış bir değerle aynı önceliğe sahip olur.
TemplatedParent şablonu özellik değerleri. Bir öğenin, bir şablon (TemplatedParent veya ControlTemplate) tarafından oluşturulmuşsa bir DataTemplate'si vardır. Daha fazla bilgi için bkz . TemplatedParent.
TemplatedParenttarafından belirtilen şablon içinde, öncelik sırası:Tetikleyiciler.
Özellik kümeleri, genellikle XAML öznitelikleri aracılığıyla.
Örtülü stiller. Yalnızca Style özelliği için geçerlidir.
Styledeğer, öğe türüyle eşleşen bir değere sahip herhangi bir TargetType stil kaynağıdır. Stil kaynağının sayfa veya uygulama içinde mevcut olması gerekir. Örtük stil kaynağı araması, Temalardaki stil kaynaklarını kapsamaz.Stil tetikleyicileri. Stil tetikleyicisi, açık veya örtük bir stil içindeki tetikleyicidir. Stil, sayfa veya uygulama içinde bulunmalıdır. Varsayılan stillerdeki tetikleyicilerin önceliği daha düşüktür.
Şablon tetikleyicileri. Şablon tetikleyicisi, doğrudan uygulanan bir şablondan veya stil içindeki bir şablondan gelen bir tetikleyicidir. Stil, sayfa veya uygulama içinde bulunmalıdır.
Stil ayarlayıcı değerleri. Stil ayarlayıcısı değeri, stil içindeki bir Setter tarafından uygulanan bir değerdir. Stil, sayfa veya uygulama içinde bulunmalıdır.
Tema stilleri olarak da bilinen varsayılan stiller. Daha fazla bilgi için bkz. Varsayılan (Tema) stilleri. Varsayılan stilde öncelik sırası:
Etkin tetikleyiciler.
Ayarlayıcı.
Devralma. Bir alt öğenin bazı bağımlılık özellikleri, değerlerini üst öğeden devralır. Bu nedenle, uygulama genelindeki her öğede özellik değerleri ayarlamak gerekli olmayabilir. Daha fazla bilgi için bkz. Özellik değeri kalıtımı.
Bağımlılık özelliği meta verilerinden varsayılan değer Bağımlılık özelliği, bu özelliğin özellik sistemi kaydı sırasında ayarlanmış bir varsayılan değere sahip olabilir. Bağımlılık özelliğini devralan türetilmiş sınıflar, bağımlılık özelliği meta verilerini (varsayılan değer dahil) tür bazında geçersiz kılabilir. Daha fazla bilgi için bkz. Bağımlılık özelliği meta verileri. Devralınan bir özellik için üst öğenin varsayılan değeri, alt öğenin varsayılan değerinden önceliklidir. Bu nedenle, devralınabilir bir özellik ayarlanmazsa, alt öğenin varsayılan değeri yerine kök veya üst öğenin varsayılan değeri kullanılır.
ŞablonlanmışEbeveyn
TemplatedParent öncelik, doğrudan standart uygulama işaretlemesinde bildirilen öğelerin özelliklerine uygulanmaz. Kavram TemplatedParent, yalnızca bir şablonun uygulanması ile ortaya çıkan görsel ağaç içindeki alt öğeler için vardır. Özellik sistemi tarafından belirtilen TemplatedParent şablonda bir öğenin özellik değerlerini ararken, öğesini oluşturan şablonu arar. Şablondaki TemplatedParent özellik değerleri genellikle öğe üzerinde yerel olarak ayarlanmış değerlermiş gibi davranır, ancak şablonlar paylaşılma olasılığı olduğundan gerçek yerel değerlerden daha az önceliklidir. Daha fazla bilgi için bkz. TemplatedParent.
Style özelliği
Aynı öncelik sırası, özelliği dışında Style tüm bağımlılık özellikleri için geçerlidir.
Style özelliği, kendi stilinde oluşturulamadığı için benzersizdir. Özellik Style üzerinde değişiklik yapmak veya animasyon oluşturmaya çalışmak önerilmez (özellik Style için animasyon oluşturmak ise özel bir animasyon sınıfı gerektirir). Sonuç olarak, tüm öncelik öğeleri geçerli değildir. Özelliğini ayarlamanın Style yalnızca üç yolu vardır:
Açık stil. Bir
Styleöğenin özelliği doğrudan ayarlanır. ÖzellikStyledeğeri, yerel bir değermiş gibi davranır ve öncelik listesindeki 3. öğeyle aynı önceliğe sahiptir. Çoğu senaryoda, açık stiller satır içinde tanımlanmamıştır ve bunun yerine kaynak olarak açıkça başvurulur, örneğinStyle="{StaticResource myResourceKey}".Gizli stil. Bir
Styleöğenin özelliği doğrudan ayarlanmadı. Bunun yerine, bir stil sayfa veya uygulama içinde bir düzeyde mevcut olduğunda uygulanır ve stilin uygulandığı öğe türüyle eşleşen bir kaynak anahtarına sahiptir, örneğin<Style TargetType="x:Type Button">. Tür tam olarak eşleşmeli, örneğin<Style TargetType="x:Type Button">MyButtontüründen türetilmiş olsa bileMyButtontürüne uygulanmaz. ÖzellikStyledeğeri, öncelik listesindeki 5. öğeyle aynı önceliğe sahiptir. Örtük bir stil değeri algılamak için DependencyPropertyHelper.GetValueSource yöntemini çağırabilir,Styleözelliğini geçirebilir ve sonuçlardaImplicitStyleReferencekontrol edilebilir.Tema stili olarak da bilinen varsayılan stil. Bir
Styleöğenin özelliği doğrudan ayarlanmadı. Bunun yerine, WPF sunum altyapısı tarafından yapılan çalışma zamanı tema değerlendirmesiyle ortaya çıkar. Çalışma zamanından önceStyleözellik değerininnullolduğu. ÖzellikStyledeğeri, öncelik listesindeki 9. öğeyle aynı önceliğe sahiptir.
Varsayılan (Tema) stilleri
WPF ile birlikte gelen her denetimin temaya göre değişebilen varsayılan bir stili vardır. Bu nedenle varsayılan stil bazen tema stili olarak adlandırılır.
ControlTemplate, bir denetim için varsayılan stilde yer alan önemli bir öğedir.
ControlTemplate , stilin Template özelliği için bir ayarlayıcı değeridir. Varsayılan stiller şablon içermiyorsa, özel bir stilin parçası olarak özel şablonu olmayan bir denetim görsel görünüme sahip olmaz. Bir şablon bir denetimin görsel görünümünü tanımlamakla birlikte, şablonun görsel ağacındaki özelliklerle ilgili denetim sınıfı arasındaki bağlantıları da tanımlar. Her denetim, şablonu değiştirmeden denetimin görsel görünümünü etkileyebilecek bir özellik kümesi sunar. Örneğin, bir Thumb denetimi olan ScrollBar bileşenin varsayılan görsel görünümünü göz önünde bulundurun.
Thumb denetimin belirli özelleştirilebilir özellikleri vardır. Denetimin Thumb varsayılan şablonu, eğimli bir görünüm oluşturmak için birkaç iç içe Border bileşen içeren temel bir yapı veya görsel ağaç oluşturur. Şablon içinde, sınıf tarafından Thumb özelleştirilebilir olması amaçlanan özellikler TemplateBinding aracılığıyla kullanıma sunulur
Varsayılan stiller tanımlarında bir TargetType belirtir. Çalışma zamanı tema değerlendirmesi, varsayılan bir stilin TargetType'sini bir denetimin DefaultStyleKey özelliğiyle eşleştirir. Buna karşılık, örtük stiller için arama davranışı denetimin gerçek türünü kullanır. değeri DefaultStyleKey türetilmiş sınıflar tarafından devralınır, bu nedenle başka bir şekilde ilişkili stile sahip olmayan türetilmiş öğeler varsayılan görsel görünüme sahip olur. Örneğin, MyButton öğesinden Button türetirseniz, MyButton öğesi Button'ün varsayılan şablonunu devralır. Türetilmiş sınıflar, bağımlılık özelliği meta verilerinde varsayılan değerini DefaultStyleKey geçersiz kılabilir. Bu nedenle, MyButton için farklı bir görsel gösterim istiyorsanız, DefaultStyleKey üzerinde MyButton bağımlılık özelliği meta verilerini değiştirebilir ve ardından denetiminizle birlikte paketleyebileceğiniz bir şablon da dahil olmak üzere ilgili varsayılan stili tanımlayabilirsiniz. Daha fazla bilgi için bkz. Denetim yazmaya genel bakış
Dinamik kaynak
Dinamik kaynak başvuruları teknik olarak özellik sisteminin bir parçası değildir ve öncelik listesiyle etkileşim kuran kendi arama sıralarına sahiptir. Temel olarak, dinamik kaynak başvurularının önceliği şudur: öğeden sayfa köküne, uygulamaya, temaya ve ardından sisteme. Daha fazla bilgi için bkz. XAML Kaynakları.
Dinamik kaynak başvuruları ve bağlamaları, ayarlandıkları konumda önceliğe sahip olsalar da, değer ertelenir. Bunun bir sonucu, yerel bir değere dinamik bir kaynak veya bağlama ayarlarsanız, yerel değerde yapılan herhangi bir değişikliğin dinamik kaynağın veya bağlamanın tamamen yerini alır. Yerel olarak ayarlanan değeri temizlemek için yöntemini çağırsanız ClearValue bile, dinamik kaynak veya bağlama geri yüklenmez. Aslında, sabit yerel değer olmadan dinamik kaynağı veya bağlaması olan bir özelliği ClearValue ile çağırırsanız, dinamik kaynak veya bağlama kaldırılır.
Geçerli Değeri Ayarla
SetCurrentValue yöntemi bir özelliği ayarlamanın başka bir yoludur, ancak öncelik listesinde yer almamaktadır.
SetCurrentValue önceki bir değerin kaynağının üzerine yazmadan özelliğin değerini değiştirmenize olanak tanır. Örneğin, bir özellik bir tetikleyici tarafından ayarlanırsa ve ardından kullanarak SetCurrentValuebaşka bir değer atarsanız, sonraki tetikleyici eylemi özelliği tetikleyici değerine geri ayarlar. Bu değere yerel bir değerin öncelik düzeyini vermeden bir özellik değeri ayarlamak istediğinizde kullanabilirsiniz SetCurrentValue . Benzer şekilde, bir özelliğin değerini bağlamanın üzerine yazmadan değiştirmek için de kullanabilirsiniz SetCurrentValue .
Zorlama ve animasyon
Hem zorlama hem de animasyon temel değer üzerinde işlem yapar. Temel değer, öğe 2'ye ulaşılana kadar öncelik listesi üzerinden yukarı doğru değerlendirilerek belirlenen, en yüksek önceliğe sahip bağımlılık özelliği değeridir.
Animasyon belirli davranışlar için hem hem de FromTo özellik değerlerini belirtmezse veya tamamlandığında animasyon kasıtlı olarak temel değere geri dönüyorsa, temel değer animasyonlu değeri etkileyebilir. Bunu uygulamada görmek için Hedef Değerler örnek uygulamasını çalıştırın. Örnekte dikdörtgen yüksekliği için herhangi bir From değerden farklı ilk yerel değerleri ayarlamayı deneyin. Örnek animasyonlar, temel değer yerine From değerini kullanarak hemen başlar. bir animasyon tamamlandıktan sonra, Stop değerini temel değerine sıfırlayarak FillBehavior olarak belirtir. Normal öncelik, animasyon sona erdikten sonra temel değer belirleme için kullanılır.
Tek bir özelliğe birden çok animasyon uygulanabilir ve her animasyon farklı bir önceliğe sahiptir. Animasyonu en yüksek önceliğe sahip uygulamak yerine WPF sunu altyapısı, animasyonların nasıl tanımlandığına ve animasyonlu değerlerin türüne bağlı olarak animasyon değerlerini birleştirebilir. Daha fazla bilgi için bkz . Animasyona genel bakış
Zorlama, öncelik listesinin en üstünde yer alır. Çalışan bir animasyon bile değer zorlamasına tabidir. WPF'deki bazı mevcut bağımlılık özellikleri yerleşik zorlamaya sahiptir. Özel bağımlılık özellikleri için, bir özellik oluştururken meta verilerin bir parçası olarak geçirdiğiniz bir CoerceValueCallback yazarak zorlama davranışını tanımlayabilirsiniz. Ayrıca, türetilmiş bir sınıfta bu özelliğin meta verilerini geçersiz kılarak mevcut özelliklerin zorlama davranışını geçersiz kılabilirsiniz. Zorlama, temel değerle, zorlama üzerindeki kısıtlamaların o sırada mevcut olduğu gibi uygulanacağı, ancak temel değerin hala korunacağı şekilde etkileşim kurar. Sonuç olarak, zorlamadaki kısıtlamalar daha sonra kaldırılırsa, zorlama temel değere mümkün olan en yakın değeri döndürür ve potansiyel olarak tüm kısıtlamalar kaldırıldığında bir özellik üzerindeki zorlama etkisi sona erer. Zorlama davranışı hakkında daha fazla bilgi için Bağımlılık özelliği geri çağırmaları ve doğrulama bölümüne bakın.
Tetikleyici davranışları
Denetimler genellikle tetikleyici davranışlarını varsayılan stillerinin bir parçası olarak tanımlar. Denetimlerde yerel özelliklerin ayarlanması, tetikleyicilerin kullanıcı odaklı olaylara (görsel veya davranışsal) yanıt vermesini önleyerek bu tetikleyicilerle çakışabilir. Özellik tetikleyicisinin yaygın kullanımlarından biri, IsSelected veya IsEnabled gibi durum özelliklerini denetlemektir. Örneğin, varsayılan olarak, bir Button devre dışı bırakıldığında, tema stilini tetikleyen bir tetikleyici (IsEnabledfalse olduğunda), Foreground değerini ayarlayarak Button’un gri görünmesini sağlar. Yerel bir Foreground değeri ayarladıysanız, yüksek öncelikli yerel özellik değeri, Foreground devre dışı bırakıldığında bile tema stili Button değerini geçersiz kılar. Bir denetim için tema düzeyi tetikleyici davranışlarını geçersiz kılan özellik değerlerini ayarlarken, söz konusu denetim için hedeflenen kullanıcı deneyimine gereksiz şekilde müdahale etmemeye dikkat edin.
ClearValue
yöntemi, ClearValue bir öğenin bağımlılık özelliğinin yerel olarak uygulanan tüm değerlerini temizler. Ancak çağrı ClearValue , özellik kaydı sırasında meta verilerde oluşturulan varsayılan değerin yeni etkin değer olduğunu garanti etmez.
Öncelik listesindeki diğer tüm katılımcılar hala etkindir ve yalnızca yerel olarak ayarlanan değer kaldırılır. Örneğin, tema stili olan bir özelliği çağırırsanız ClearValue , tema stili değeri meta veri tabanlı varsayılan değer yerine yeni değer olarak uygulanır. Kayıtlı meta veri varsayılan değerine bir özellik değeri ayarlamak istiyorsanız, bağımlılık özelliği meta verilerini sorgulayarak varsayılan meta veri değerini alın ve çağrısıyla SetValueözellik değerini yerel olarak ayarlayın.
Ayrıca bakınız
- DependencyObject
- DependencyProperty
- Bağımlılık özelliklerine genel bakış
- Özel Bağımlılık Özellikleri
- Bağımlılık Özelliği Geri Çağırmaları ve Doğrulama
.NET Desktop feedback