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.

Ön koş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. Başlangıç/To/By Animasyonlarına Genel Bakış, Anahtar Çerçevesi Animasyonlarına Genel Bakış ve Yol Animasyonlarına Genel Bakış.

Animasyon sınıfları sınıfından devraldığındanFreezable, nesneleri ve öğesinden Freezabledevralma hakkında bilgi Freezable sahibi olmanız gerekir. Daha fazla bilgi için bkz . Freezable Objects Overview.

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 DoubleKeyFrame*<Type>*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.

  • *<Type>*AnimationBase sınıflarından AnimationTimeline 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 veya öğesinden AnimationTimelinedevralan 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 hesaplanan ve son nesne etkileşimleri kümesini temel alan değerlerle birden çok nesneye animasyon ekleme Çerçeve başına geri çağırma kullanın. Daha fazla bilgi için Çerçeve Başına Kullanım Geri Çağırması 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. Anahtar Çerçevesi Animasyonlarına Genel Bakış bölümünde açıklandığı gibi, bir anahtar çerçevesi 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.

*<Type>*KeyFrame sınıfları sınıftan devraldığından Freezable , sınıfınızın yeni bir örneğini döndürmek için çekirdeği de geçersiz kılmanız CreateInstanceCore 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ı sınıftan devraldığından Freezable , sınıfınızın yeni bir örneğini döndürmek için çekirdeği de geçersiz kılmanız CreateInstanceCore 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

Henüz eşleşen WPF animasyonu AnimationTimeline olmayan bir tür için animasyon oluşturmak istediğinizde veya kesin olarak yazılmayan bir animasyon oluşturmak istediğinizde 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 geçersiz kılmanız CreateInstanceCore 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 Animasyon için geçerli zamanı veya ilerleme durumunu elde etmek için öğesini AnimationClock 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 AnimationTimelinetüretilen bir soyut *<Type>*AnimationBase sınıfı oluşturun. Bu sınıf yöntemini geçersiz kılmalıdır TargetPropertyType . Ayrıca, varsayılan kaynak değerin ve varsayılan hedef değer parametrelerinin türlerini doğrulayıp GetCurrentValueCore'ı çağırması için yeni bir soyut yöntem olan GetCurrentValueCore'ı ve geçersiz kılmayı GetCurrentValue tanıtmalıdır.

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

Alternatif Yaklaşımlar

Karşılık gelen From/To/By animasyonu veya anahtar çerçevesi animasyonu olmayan bir türe animasyon eklemek istiyorsanız, kullanmayı ObjectAnimationUsingKeyFramesgö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.

Çerçeve Başına Geri Çağırma Kullanma

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 oluşturma ağacına her sıralandığında, olay işleyici yönteminiz ç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 sunu zamanını elde etmek için, EventArgs bu olayla ilişkilendirilmiş olan, geçerli çerçevenin işleme süresini elde etmek için kullanabileceğiniz bir RenderingTime özellik sağlayan olarak RenderingEventArgsyayınlanabilir.

Daha fazla bilgi için sayfaya Rendering bakın.

Ayrıca bkz.