Özellik Değiştirme Olayları
Windows Presentation Foundation (WPF), bir özelliğin değerindeki değişikliğe yanıt olarak tetiklenen çeşitli olayları tanımlar. Genellikle özelliği bir bağımlılık özelliğidir. Olayın kendisi bazen yönlendirilmiş bir olaydır ve bazen standart bir 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ı üzerinden daha uygun şekilde yönlendirilirken, diğer özellik değişiklikleri genellikle yalnızca özelliğin değiştirildiği nesneyle ilgilidir.
Özellik Değişikliği Olayını Tanımlama
Bir özellik değişikliğini bildiren tüm olaylar, imza deseni veya adlandırma deseni sayesinde açıkça özellik değişikliği olayı olarak tanımlanmaz. Genellikle SDK belgelerindeki olayın açıklaması, olayın doğrudan bir özellik değeri değişikliğine bağlı olup olmadığını gösterir ve özellik ile olay arasında çapraz başvurular sağlar.
RoutedPropertyChanged Olayları
Bazı olaylar, özellik değişikliği olayları için açıkça kullanılan bir olay veri türü ve temsilci kullanır. Olay veri türü , RoutedPropertyChangedEventArgs<T>temsilci ise şeklindedir RoutedPropertyChangedEventHandler<T>. Olay verilerinin ve temsilcinin 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 OldValue özellik içerir ve NewValueher ikisi de olay verilerinde tür bağımsız değişkeni olarak geçirilir.
Adın "Yönlendirilen" bölümü, değiştirilen özelliğin yönlendirilmiş olay olarak kaydedildiğini gösterir. Özellik değişikliği olayını yönlendirmenin avantajı, alt öğelerdeki (denetimin bileşik parçaları) özellikler değerleri değiştirirse denetimin en üst düzeyinin değiştirilen özellikleri alabilmesidir. Örneğin, gibi Sliderbir denetimi içeren bir RangeBase denetim oluşturabilirsiniz. Özelliğin Value 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 doğrulayıcı olarak kullanmak cazip olabilir. Ancak, çoğu özellik değişikliği olayının tasarım amacı bu değildir. Genellikle, değerleri kodunuzun diğer mantıksal alanlarında bu değerler üzerinde işlem yapabileceğiniz şekilde sağlanır, ancak aslında olay işleyicisinin içinden değerleri değiştirmek önerilmez ve işleyicinizin nasıl uygulandığına bağlı olarak istenmeyen özyinelemelere neden olabilir.
Özelliğiniz özel bir bağımlılık özelliğiyse veya örnekleme kodunu tanımladığınız türetilmiş bir sınıfla çalışıyorsanız, WPF özellik sisteminde yerleşik özellik değişikliklerini izlemek 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 bilgi 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ştirilen olay senaryosunun parçası olan başka bir tür çifti de ve DependencyPropertyChangedEventHandlerşeklindedirDependencyPropertyChangedEventArgs. Bu özellik değişiklikleri için olaylar yönlendirilmiyor; bunlar standart CLR olaylarıdır. DependencyPropertyChangedEventArgs, öğesinden EventArgsDependencyPropertyChangedEventArgs türetilmediği için olağan dışı bir olay veri raporlama türüdür; bir sınıf değil, bir yapıdır.
ve kullanan DependencyPropertyChangedEventArgs olaylar DependencyPropertyChangedEventHandler , olaylardan biraz daha RoutedPropertyChanged
yaygındır. Bu türleri kullanan bir olaya örnek olarak verilmiştir IsMouseCapturedChanged.
gibi RoutedPropertyChangedEventArgs<T>, DependencyPropertyChangedEventArgs özelliği için eski ve yeni bir değer de bildirir. Ayrıca, değerlerle yapabileceklerinizle ilgili dikkat edilmesi gerekenler de geçerlidir; genellikle, olaya yanıt olarak gönderendeki değerleri yeniden değiştirmeye çalışmanız önerilmez.
Özellik Tetikleyicileri
Özellik değişikliği olayıyla yakından ilgili bir kavram, özellik tetikleyicisidir. Özellik tetikleyicisi bir stil veya şablon içinde oluşturulur ve özellik tetikleyicisinin atandığı özelliğin değerine göre koşullu bir davranış oluşturmanıza olanak tanır.
Özellik tetikleyicisinin özelliği bir bağımlılık özelliği olmalıdır. Salt okunur bir bağımlılık özelliği olabilir (ve genellikle bu özelliktir). Bir denetim tarafından kullanıma sunulan bağımlılık özelliğinin en azından kısmen özellik tetikleyicisi olacak şekilde tasarlanması için iyi bir gösterge, özellik adının "Is" ile başlamasıdır. Bu adlandırmaya sahip özellikler genellikle, özelliğin birincil senaryosunun gerçek zamanlı kullanıcı arabirimi için sonuçları olabilecek denetim durumunu bildirdiği ve bu nedenle bir özellik tetikleyici adayı olduğu salt okunur bir Boole bağımlılık özelliğidir.
Bu özelliklerden bazılarının ayrılmış bir özelliği değiştirilmiş olayı da vardır. Örneğin, özelliğinde IsMouseCaptured değiştirilmiş bir özellik olayı IsMouseCapturedChangedvardır. Özelliğin kendisi salt okunurdur ve değeri giriş sistemi tarafından ayarlanır ve giriş sistemi her gerçek zamanlı değişikliği tetikler IsMouseCapturedChanged .
Gerçek özellik değişikliği olayıyla karşılaştırıldığında, özellik değişikliği üzerinde işlem yapmak için özellik tetikleyicisi kullanmanın bazı sınırlamaları vardır.
Özellik tetikleyicileri tam eşleşme mantığı üzerinden çalışır. Tetikleyicinin gerçekleştireceği belirli değeri gösteren bir özellik ve 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 özelliklerine veya ayrılmış bir numaralandırma değeri alan özelliklere yöneliktir; burada olası değer aralığı her bir durum için tetikleyici tanımlayabilecek kadar yönetilebilir. Ya da özellik tetikleyicileri yalnızca bir öğe sayısının sıfıra ulaşması gibi özel değerler için mevcut olabilir ve özellik değerinin sıfırdan uzak değiştiği durumları hesaplayan bir tetikleyici olmayabilir (tüm durumların tetikleyicileri yerine, burada bir kod olayı işleyicisine veya değer sıfır olmadığında tetikleyici durumundan geri dönen varsayılan bir davranışa ihtiyacınız olabilir).
Özellik tetikleyicisi söz dizimi, programlamadaki "if" deyimine benzer. Tetikleyici koşulu true ise, özellik tetikleyicisinin "gövdesi" "yürütülür". Özellik tetikleyicisinin "gövdesi" kod değil, işaretlemedir. Bu işaretleme, stilin veya şablonun uygulandığı nesnenin diğer özelliklerini ayarlamak için bir veya daha fazla Setter öğe kullanmakla sınırlıdır.
Çok çeşitli olası değerlere sahip bir özellik tetikleyicisinin "if" koşulunu dengelemek için, genellikle kullanarak aynı özellik değerinin varsayılan Setterolarak ayarlanması önerilir. Bu şekilde, Trigger tetikleyici koşulu true olduğunda kapsanan ayarlayıcı öncelikli olur ve Setter tetikleyici koşulu false olduğunda içinde olmayan Trigger öncelik kazanır.
Özellik tetikleyicileri genellikle aynı öğedeki başka bir özelliğin durumuna bağlı olarak bir veya daha fazla görünüm özelliğinin değişmesi gereken senaryolar için uygundur.
Özellik tetikleyicileri hakkında daha fazla bilgi edinmek için bkz . Stil Oluşturma ve Şablon Oluşturma.
Ayrıca bkz.
.NET Desktop feedback