Özellik Değiştirme Olayları

Windows Presentation Foundation (WPF), bir özelliğin değerindeki bir değişikliğe yanıt olarak oluşturulan birkaç olayı tanımlar. Genellikle özelliği bir bağımlılık özelliğidir. Olay bazen yönlendirilmiş bir olaydır ve bazen standart ortak dil çalışma zamanı (CLR) olayıdır. Olay tanımı, senaryoya bağlı olarak değişir, çünkü bazı özellik değişiklikleri bir öğe ağacı aracılığıyla daha uygun olduğundan, diğer özellik değişiklikleri genellikle özelliğin değiştiği nesnenin kaygısından kaynaklanır.

Özellik değişiklik olayını tanımlama

Bir özellik değişikliğini rapor eden tüm olaylar, bir imza deseninin ya da bir adlandırma deseninin virtuale tarafından açıkça bir özellik değiştirildi olayı olarak tanımlanır. Genellikle, SDK belgelerindeki etkinliğin açıklaması, olayın doğrudan bir özellik değeri değişikliğine bağlı olup olmadığını ve özellik ile olay arasında çapraz başvurular sağladığını gösterir.

Kabatedpropertychanged olayları

Belirli olaylar, özellik değişiklik olayları için açıkça kullanılan bir olay veri türü ve temsilcisini kullanır. Olay veri türü RoutedPropertyChangedEventArgs<T> , ve temsilcisidir RoutedPropertyChangedEventHandler<T> . Olay verileri ve temsilcisinin her ikisi de, işleyiciyi tanımlarken değişen özelliğin gerçek türünü belirtmek için kullanılan genel bir tür parametresine sahiptir. Olay verileri iki özellik içerir OldValue ve NewValue her ikisi de olay verilerinde tür bağımsız değişkeni olarak geçirilir.

Adın "Dolaştırılan" bölümü, özellik değiştirilen olayın yönlendirilmiş olay olarak kaydedildiğini gösterir. Özellik değişti olayını yönlendirmenin avantajı, alt öğelerdeki Özellikler (denetimin bileşik parçaları) değerlerini değiştirmek için bir denetimin en üst düzeyinin Özellik değişmiş olayları almasına sahip olması olabilir. Örneğin, gibi bir denetimi içeren bir denetim oluşturabilirsiniz RangeBaseSlider . ValueÖzelliğin değeri kaydırıcı bölümünde değişirse, bu değişikliği bölüm yerine üst denetimde işlemek isteyebilirsiniz.

Eski bir değere ve yeni bir değere sahip olduğunuzdan, bu olay işleyicisini Özellik değeri için bir doğrulayıcı olarak kullanmak mümkün olabilir. Bununla birlikte, çoğu özellik tarafından değiştirilen olayların tasarım amacı değildir. Genellikle değerler, kodunuzun diğer Logic alanlarında bu değerler üzerinde işlem yapabilmeniz için sağlanır, ancak gerçekten de olay işleyicisindeki değerleri değiştirmeniz önerilmez ve işleyicinizin nasıl uygulandığına bağlı olarak yanlışlıkla özyineleme yapılmasına yol açabilir.

Özelliği özel bir bağımlılık özelliği ise veya örnek kodu tanımladığınız türetilmiş bir sınıfla çalışıyorsanız, WPF özellik sisteminde yerleşik olarak bulunan özellik değişikliklerinin izlenmesi için çok daha iyi bir mekanizma vardır: özellik sistemi geri çağırmaları CoerceValueCallback ve PropertyChangedCallback . Doğrulama ve zorlama için WPF özellik sistemini nasıl kullanabileceğiniz hakkında daha fazla ayrıntı için bkz. bağımlılık özelliği geri çağırmaları ve doğrulama ve Özel bağımlılık özellikleri.

DependencyPropertyChanged olayları

Bir özellik değişmiş olay senaryosunun parçası olan bir diğer tür çifti DependencyPropertyChangedEventArgs ve ' dir DependencyPropertyChangedEventHandler . Bu özellik değişiklikleri için olaylar yönlendirilmez; Bunlar standart CLR olaylardır. DependencyPropertyChangedEventArgs , öğesinden türetilmediği için olağandışı bir olay veri raporlama türüdür; bir EventArgsDependencyPropertyChangedEventArgs sınıf değil, yapısıdır.

Ve kullanan olaylar DependencyPropertyChangedEventArgsDependencyPropertyChangedEventHandler , olaylardan biraz daha yaygın olarak kullanılır RoutedPropertyChanged . Bu türleri kullanan bir olaya bir örnek vardır IsMouseCapturedChanged .

Benzer şekilde RoutedPropertyChangedEventArgs<T> , DependencyPropertyChangedEventArgs özelliği için eski ve yeni bir değeri de raporlar. Ayrıca, değerlerle yapabileceklerinizle ilgili dikkat edilecek noktalar geçerlidir; olaya yanıt olarak, gönderen üzerinde değerleri yeniden değiştirmeyi denemeniz önerilmez.

Özellik Tetikleyicileri

Özellik değişti olayına yakından ilgili bir kavram, bir özellik tetikleyicisine sahiptir. Bir stil veya şablon içinde bir özellik tetikleyicisi oluşturulur ve özellik tetikleyicisinin atandığı özelliğin değerine göre koşullu bir davranış oluşturmanıza olanak sağlar.

Özellik tetikleyicisi özelliği bir bağımlılık özelliği olmalıdır. Salt okuma bağımlılığı özelliği (ve sık olarak) olabilir. Bir denetim tarafından sunulan bağımlılık özelliğinin en az kısmen bir özellik tetikleyicisi olarak tasarlandığına ilişkin iyi bir göstergedir. Özellik adı "SIS" ile başlıyorsa. Bu adlandırmayla ilgili özellikler genellikle, özelliğin birincil senaryosunun gerçek zamanlı kullanıcı arabirimine sonuçlara sahip olabilecek ve bu nedenle bir özellik tetikleyicisi adayından oluşan bir salt okunurdur Boolean Dependency özelliğidir.

Bu özelliklerden bazılarının Ayrıca özel bir özellik değiştirilmiş olayı vardır. Örneğin, özelliğin IsMouseCaptured değiştirilen bir olayı vardır IsMouseCapturedChanged . Özelliğin kendisi salt okunurdur ve değeri giriş sistemi tarafından ayarlanır ve giriş sistemi IsMouseCapturedChanged her gerçek zamanlı değişikliğe göre yükseltilir.

Bir özellik değişikliği üzerinde işlem yapmak için bir özellik tetikleyicisi kullanılması, doğru özellik değiştirildi olayı ile karşılaştırıldığında bazı sınırlamalara sahiptir.

Özellik Tetikleyicileri tam eşleştirme mantığı aracılığıyla çalışır. Tetikleyicinin işlem yapması için belirli bir değeri belirten bir özellik ve bir değer belirtirsiniz. Örneğin: <Setter Property="IsMouseCaptured" Value="true"> ... </Setter> . Bu sınırlama nedeniyle, özellik tetikleyicisi kullanımlarının çoğu, Boole özellikleri veya özel bir numaralandırma değeri alan özellikler için olacaktır, burada olası değer aralığı her durum için bir tetikleyici tanımlamak üzere yeterince yönetilebilir olur. Ya da özellik Tetikleyicileri yalnızca bir öğe sayısı sıfıra ulaştığında ve özellik değeri sıfırdan farklı değiştiğinde bu servis taleplerine hiçbir tetikleme olmadığında (her durumda Tetikleyiciler yerine), burada bir kod olay işleyicisine veya değer sıfır olmadığında yeniden tetikleme durumundan geri dönerek bir varsayılan davranışa sahip olabilir.

Özellik tetikleyicisi sözdizimi, programlamada bir "if" ifadesine benzer. Tetikleme koşulu true ise, özellik tetikleyicisinin "Body" değeri "yürütülür" olur. Özellik tetikleyicisinin "Body" kodu değil, biçimlendirme. Bu biçimlendirme bir veya daha fazla Setter öğe kullanarak stilin veya şablonun uygulandığı nesnenin diğer özelliklerini ayarlamak için sınırlıdır.

Çok sayıda olası değere sahip olan bir özellik tetikleyicisinin "if" koşulunu kaydırmak için, genellikle aynı özellik değerinin ' ı kullanarak varsayılan olarak ayarlanması önerilir Setter . Bu şekilde, Trigger Tetikleme koşulu true olduğunda içerilen ayarlayıcı önceliğe sahip olur ve Setter tetikleyici koşulu false olduğunda, bir içinde olmayan bir Trigger önceliğe sahip olur.

Özellik Tetikleyicileri genellikle bir veya daha fazla görünüm özelliğinin aynı öğe üzerindeki başka bir özelliğin durumuna göre değiştirilmesi gereken senaryolar için uygundur.

Özellik Tetikleyicileri hakkında daha fazla bilgi için bkz. Stil oluşturma ve şablonoluşturma.

Ayrıca bkz.