2012-03-13 26 views
5

Uygulamada belirli bir kılavuzdaki kullanıcı denetimlerini yüklüyorum ve denetimlerin Loaded olay işleyicisindeki yükleme kullanıcı denetimlerine animasyon ekliyorum.Yüklendikten ve kullanıcı kontrolünü göstermeden önce herhangi bir olay var mı?

Bazı kullanıcı denetimleri hafiftir ve bazılarının yüklemeden önce ağır hesaplamaları gerekir. Sorun şu ki, yoğun kullanıcı kontrollerine 1 saniyelik bir animasyon eklediğimde, kontrolün gösterilmesi, animasyonun asla görülemeyeceği kadar dayanıyor!

Animasyonumu kullanıcı denetimine ekleyebildiğim başka bir olay var mı, böylece ağır olanlar ve açık olanlar aynı animasyonda görüntülensin mi?

Kontrolü göstermeden hemen önce bir olaya ihtiyacım var. Maalesef, OnLoaded benim için doğru yer gibi görünmüyor.

cevap

5

cevap Storyboard.Begin düşük bir öncelik veriyordu. https://stackoverflow.com/a/4708172/970420

yüzden animasyonu başlayan bu kod var:

Bu cevap onu öğrendim

void BeginStoryboardAction(Storyboard sb) 
    { 
     sb.Begin(); 
    } 

ve biz bu arada bunu çağırmalıdır:

Dispatcher.BeginInvoke(new Action<Storyboard>(BeginStoryboardAction), DispatcherPriority.ContextIdle, sb); 

sb, içinde bazı animasyonlar bulunan Storyboard'un bir örneğidir.

[Düzenle]: Başka kısa yol: bileşenler yaratılıyor hemen sonra kod yürütmesine jenerik yol arıyoruz fakat işlenir önce LayoutUpdated olay olur olanlar için

Dispatcher.BeginInvoke(new Action<Storyboard>(delegate (Storyboard stb){stb.Begin();}), DispatcherPriority.ContextIdle, sb); 
3

Bir pencere ilk açıldığında, Loaded ve ContentRendered olayları yalnızca Etkinleştirilmiş olay kaldırıldıktan sonra kaldırılır. Bu düşünceyle, ContentRendered kaldırıldığında bir pencere etkin olarak düşünülebilir.

http://msdn.microsoft.com/en-us/library/ms748948.aspx

+2

İlginiz için teşekkürler Aksel, konteynır penceresi için ContentRendered'i test ettim ve bir kez daha başlangıçta işten kovuldum ve bir daha asla kovulmadım. Ancak çözüme varıyorum :) Çözüm burada: http://stackoverflow.com/a/4708172/970420, Rick'in hikaye panosunu başlatarak en düşük önceliğe sahip olması gerektiğini söylememiz gerektiğini söyledi. Bu yüzden void BeginStoryboardAction() {sb.Begin(); } 've bu şekilde ertelenmiş çağrı:' Dispatcher.BeginInvoke (yeni Eylem (BeginStoryboardAction), DispatcherPriority.ContextIdle); 'ağır yükleme kullanıcı kontrolleri için bile bir çekicilik gibi çalışır :) –

0

. Bu, pencerelerin içinde, kullanıcının içinde veya özel kontrollerin içinde çalışmalıdır.