Aracılığıyla paylaş


Özel Animasyonlara Genel Bakış

Bu konu başlığı altında, özel anahtar çerçeveler, animasyon sınıfları oluşturarak veya bunu atlamak için çerçeve başına geri çağırma kullanarak WPF animasyon sisteminin nasıl ve ne zaman genişlettiği açıklanır.

Önkoşullar

Bu konuyu anlamak için WPF tarafından sağlanan farklı animasyon türleri hakkında bilgi sahibi olmanız gerekir. Daha fazla bilgi için bkz. From/To/By Animasyonları Genel Bakışı, Key-Frame Animasyonları Genel Bakışı ve Path Animasyonları Genel Bakışı.

Animasyon sınıfları Freezable sınıfından türediği için, Freezable nesneleri ve Freezable sınıfından nasıl türetileceği hakkında bilgi sahibi olmanız gerekir. Daha fazla bilgi için bkz: Donabilir Nesneler Genel Bakış.

Animasyon Sistemini Genişletme

Kullanmak istediğiniz yerleşik işlevsellik düzeyine bağlı olarak WPF animasyon sistemini genişletmenin çeşitli yolları vardır. WPF animasyon altyapısında üç birincil genişletilebilirlik noktası vardır:

  • gibi <*>TypeDoubleKeyFrame*KeyFrame sınıflarından birinden devralarak özel bir anahtar çerçevesi nesnesi oluşturun. Bu yaklaşım, WPF animasyon altyapısının yerleşik işlevlerinin çoğunu kullanır.

  • AnimationTimeline veya *<Type>*AnimationBase sınıflarından birini devralarak kendi animasyon sınıfınızı oluşturun.

  • Kare başına geri çağırma kullanarak kare başına animasyonlar oluşturun. Bu yaklaşım animasyon ve zamanlama sistemini tamamen atlar.

Aşağıdaki tabloda, animasyon sistemini genişletmeye yönelik bazı senaryolar açıklanmaktadır.

İstediğiniz zaman... Bu yaklaşımı kullanın
Karşılık gelen *<Type>*AnimationUsingKeyFrames içeren bir türün değerleri arasındaki ilişkilendirmeyi özelleştirme Özel bir anahtar çerçevesi oluşturun. Daha fazla bilgi için Özel Anahtar Çerçevesi Oluşturma bölümüne bakın.
Karşılık gelen *<Type>*Animation içeren bir türün değerleri arasındaki ilişkilendirmeden daha fazlasını özelleştirin. Animasyon eklemek istediğiniz türe karşılık gelen *<Type>*AnimationBase sınıfından devralan özel bir animasyon sınıfı oluşturun. Daha fazla bilgi için Özel Animasyon Sınıfı Oluşturma bölümüne bakın.
Karşılık gelen WPF animasyonu olmayan bir türe animasyon ekleme ObjectAnimationUsingKeyFrames kullanın ya da AnimationTimeline öğesinden devralan bir sınıf oluşturun. Daha fazla bilgi için Özel Animasyon Sınıfı Oluşturma bölümüne bakın.
Her çerçevede yeniden hesaplanan ve son nesne etkileşimleri kümesine dayalı değerlerle birden fazla nesneye animasyon ekleyin. Kare başına geri çağırma işlevi kullanın. Daha fazla bilgi için Kullanım Per-Frame Geri Çağırma oluşturma bölümüne bakın.

Özel Anahtar Çerçevesi Oluşturma

Özel anahtar çerçevesi sınıfı oluşturmak, animasyon sistemini genişletmenin en basit yoludur. Anahtar çerçevesi animasyonu için farklı bir ilişkilendirme yöntemi kullanmak istediğinizde bu yaklaşımı kullanın. Key-Frame Animasyonlara Genel Bakış bölümünde açıklandığı gibi, bir anahtar çerçeve animasyonu çıkış değerlerini oluşturmak için anahtar çerçeve nesnelerini kullanır. Her anahtar çerçeve nesnesi üç işlev gerçekleştirir:

  • Özelliğini kullanarak Value bir hedef değeri belirtir.

  • Özelliği kullanılarak KeyTime bu değere ulaşılması gereken zamanı belirtir.

  • InterpolateValueCore yöntemini uygulayarak önceki anahtar çerçevesinin değeriyle kendi değeri arasında ara değer oluşturur.

Uygulama Yönergeleri

*<Type>*KeyFrame soyut sınıfından türetilir ve InterpolateValueCore yöntemini uygulayın. InterpolateValueCore yöntemi, anahtar çerçevenin geçerli değerini döndürür. İki parametre alır: önceki anahtar çerçevesinin değeri ve 0 ile 1 arasında bir ilerleme değeri. 0 ilerleme durumu, anahtar çerçevenin yeni başladığını, 1 değeri ise anahtar çerçevenin yeni tamamlandığını ve özelliği tarafından Value belirtilen değeri döndürmesi gerektiğini gösterir.

*c0 />Type<*KeyFrame sınıfları, > sınıfından devralındıkları için, Freezable ana işlevi de geçersiz kılarak sınıfınızın yeni bir örneğini oluşturmanız gerekir. Sınıfı, verilerini depolamak için bağımlılık özelliklerini kullanmıyorsa veya oluşturulduktan sonra fazladan başlatma gerektiriyorsa, ek yöntemleri geçersiz kılmanız gerekebilir; Daha fazla bilgi için bkz. Freezable Objects Overview .

Özel *<Type>*KeyFrame animasyonunuzu oluşturduktan sonra, bu tür için *<Type>*AnimationUsingKeyFrames ile kullanabilirsiniz.

Özel Animasyon Sınıfı Oluşturma

Kendi animasyon türünüzü oluşturmak, bir nesnenin animasyonlu olarak nasıl olduğu üzerinde daha fazla denetim sağlar. Kendi animasyon türünüzü oluşturmanın iki önerilen yolu vardır: sınıfından AnimationTimeline veya *<Type>*AnimationBase sınıfından türetebilirsiniz. *<Type>*Animation veya *<Type>*AnimationUsingKeyFrames sınıflarından türetme önerilmez.

AnimationBase Türünden <>Türetme

*<Type>*AnimationBase sınıfından türetme, yeni bir animasyon türü oluşturmanın en basit yoludur. İlgili *<Type>*AnimationBase sınıfına sahip olan tür için yeni bir animasyon oluşturmak istediğinizde bu yaklaşımı kullanın.

Uygulama Yönergeleri

*<Type>*Animation sınıfından türetilir ve GetCurrentValueCore yöntemini uygular. GetCurrentValueCore yöntemi animasyonun geçerli değerini döndürür. Üç parametre alır: önerilen bir başlangıç değeri, önerilen bir bitiş değeri ve animasyonun ilerleme durumunu belirlemek için kullandığınız bir AnimationClock.

*<Type>*AnimationBase sınıfları Freezable sınıfından devraldığı için, sınıfınızın yeni bir örneğini döndürebilmek amacıyla CreateInstanceCore sınıfını da geçersiz kılmanız gerekir. Sınıfı, verilerini depolamak için bağımlılık özelliklerini kullanmıyorsa veya oluşturulduktan sonra fazladan başlatma gerektiriyorsa, ek yöntemleri geçersiz kılmanız gerekebilir; Daha fazla bilgi için bkz. Freezable Objects Overview .

Daha fazla bilgi için animasyon eklemek istediğiniz tür için *<Type>*AnimationBase sınıfının GetCurrentValueCore yöntemi belgelerine bakın. Örnek için bkz . Özel Animasyon Örneği

Alternatif Yaklaşımlar

*<Type>*KeyFrame sınıflarından birinden türetmeyi göz önünde bulundurarak animasyon değerlerinin ilişkilendirme biçimini değiştirmek istiyorsanız. Oluşturduğunuz anahtar çerçeve WPF tarafından sağlanan karşılık gelen *<Type>*AnimationUsingKeyFrames ile kullanılabilir.

AnimationTimeline'dan türet

Animasyon oluşturmak istediğiniz tür için henüz eşleşen bir WPF animasyonu yoksa veya güçlü bir şekilde tiplenmemiş bir animasyon oluşturmak istiyorsanız AnimationTimeline sınıfından türeyin.

Uygulama Yönergeleri

sınıfından türet ve AnimationTimeline aşağıdaki üyeleri geçersiz kıl:

  • CreateInstanceCore – Yeni sınıfınız somutsa, sınıfınızın yeni bir örneğini döndürmek için CreateInstanceCore metodunu geçersiz kılmanız gerekir.

  • GetCurrentValue – Animasyonunuzun geçerli değerini döndürmek için bu yöntemi geçersiz kılın. Üç parametre alır: varsayılan kaynak değeri, varsayılan hedef değeri ve .AnimationClock Animasyonun geçerli zamanı veya ilerleme durumunu elde etmek için AnimationClock öğesini kullanın. Varsayılan çıkış noktası ve hedef değerlerinin kullanılıp kullanılmayacağını seçebilirsiniz.

  • IsDestinationDefault – Animasyonunuzun yöntemi tarafından GetCurrentValue belirtilen varsayılan hedef değeri kullanıp kullanmadığını belirtmek için bu özelliği geçersiz kılın.

  • TargetPropertyType – Animasyonunuzun ürettiği çıkışı belirtmek Type için bu özelliği geçersiz kılın.

Sınıfı, verilerini depolamak için bağımlılık özelliklerini kullanmıyorsa veya oluşturulduktan sonra fazladan başlatma gerektiriyorsa, ek yöntemleri geçersiz kılmanız gerekebilir; Daha fazla bilgi için bkz. Freezable Objects Overview .

Önerilen paradigma (WPF animasyonları tarafından kullanılır) iki devralma düzeyi kullanmaktır:

  1. öğesinden <türetilen bir soyut *>TypeAnimationTimeline*AnimationBase sınıfı oluşturun. Bu sınıf yöntemini geçersiz kılmalıdır TargetPropertyType . GetCurrentValueCore isimli yeni bir soyut yöntemin tanıtılması ve GetCurrentValue fonksiyonunun, varsayılan kaynak değeri ve varsayılan hedef değeri parametrelerinin türlerini doğrulayıp ardından GetCurrentValueCore'ı çağıracak şekilde geçersiz kılınması gerekir.

  2. Yeni *<Type>*AnimationBase sınıfınızdan türeyen, tanıttığınız GetCurrentValueCore yöntemini ve CreateInstanceCore özelliğini içeren IsDestinationDefault metodunu geçersiz kılan başka bir sınıf oluşturun.

Alternatif Yaklaşımlar

Kendisine karşılık gelen bir From/To/By animasyonu veya anahtar çerçeve animasyonu olmayan bir türe animasyon eklemek istiyorsanız, bir ObjectAnimationUsingKeyFrames kullanmayı göz önünde bulundurun. Zayıf bir şekilde yazıldığı için, herhangi bir ObjectAnimationUsingKeyFrames değer türüne animasyon ekleyebilir. Bu yaklaşımın dezavantajı, yalnızca ayrı ilişkilendirmeyi ObjectAnimationUsingKeyFrames desteklemesidir.

Per-Frame Geri Çağırma Kullanımı

WPF animasyon sistemini tamamen atlamanız gerektiğinde bu yaklaşımı kullanın. Bu yaklaşımın bir senaryosu, her animasyon adımında animasyonlu nesnelerin yeni yönünün veya konumunun son nesne etkileşimleri kümesine göre yeniden derlenmesi gereken fizik animasyonlarıdır.

Uygulama Yönergeleri

Bu genel bakışta açıklanan diğer yaklaşımlardan farklı olarak, çerçeve başına geri çağırmayı kullanmak için özel bir animasyon veya anahtar çerçeve sınıfı oluşturmanız gerekmez.

Bunun yerine, animasyon eklemek istediğiniz nesneleri içeren nesnenin olayına kaydolabilirsiniz Rendering . Bu olay işleyici yöntemi çerçeve başına bir kez çağrılır. WPF, görsel ağaçtaki kalıcı işleme verilerini kompozisyon ağacına her aktardığında, olay işleyici yöntemi çağrılır.

Olay işleyicinizde, animasyon efektiniz için gereken hesaplamaları yapın ve bu değerlerle animasyon eklemek istediğiniz nesnelerin özelliklerini ayarlayın.

Geçerli çerçevenin gösterim zamanını elde etmek için, bu olayla ilişkili olan EventArgs, geçerli çerçevenin işleme süresini elde etmek için kullanabileceğiniz bir RenderingEventArgs özelliği sağlayan RenderingTime olarak dönüştürülebilir.

Daha fazla bilgi için Rendering sayfasına bakın.

Ayrıca bakınız