2012-03-13 4 views
5

मैं अपने एप्लिकेशन में एक विशिष्ट ग्रिड में उपयोगकर्ता नियंत्रण लोड कर रहा हूं और मैं नियंत्रण के Loaded ईवेंट हैंडलर में लोडिंग उपयोगकर्ता नियंत्रण में एनिमेशन जोड़ रहा हूं।क्या लोड होने के बाद और उपयोगकर्ता नियंत्रण दिखाने से पहले कोई घटना है?

कुछ उपयोगकर्ता नियंत्रण हल्के वजन वाले होते हैं और उनमें से कुछ को लोड करने से पहले भारी गणना की आवश्यकता होती है। समस्या यह है कि जब मैं भारी उपयोगकर्ता नियंत्रण में 1 सेकंड एनीमेशन जोड़ता हूं तो नियंत्रण दिखाता है ताकि एनीमेशन कभी नहीं देखा जा सके!

क्या कोई अन्य घटना है कि मैं उपयोगकर्ता एनीमेशन में अपनी एनीमेशन जोड़ सकता हूं ताकि भारी और प्रकाश वाले एक ही एनीमेशन के साथ प्रदर्शित हो जाएं?

मुझे नियंत्रण दिखाने से पहले एक घटना की आवश्यकता है। दुर्भाग्यवश, OnLoaded मेरे लिए सही जगह नहीं लग रहा है।

उत्तर

5

जवाब Storyboard.Begin एक निम्न प्राथमिकता दे रहा था। https://stackoverflow.com/a/4708172/970420

तो हम एनीमेशन शुरुआत के लिए इस कोड है:

मैं इस जवाब से यह पता चला

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

और हम इस तरह से यह कहना चाहिए:

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

एसबी स्टोरीबोर्ड का एक उदाहरण है जिसमें इसमें कुछ एनिमेशन हैं।

[संपादित करें]: एक और छोटा रास्ता:

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

जब कोई विंडो पहली बार खोली जाती है, तो लोड की गई और सामग्री प्रस्तुत घटनाएं सक्रिय घटना के बाद ही उठाई जाती हैं। इस बात को ध्यान में रखते हुए, सामग्री रेंडर किए जाने पर एक खिड़की को प्रभावी ढंग से खोला जा सकता है।

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

+2

धन्यवाद आपके ध्यान के लिए Aksel लेकिन मैंने कंटेनर विंडो के लिए ContentRendered का परीक्षण किया और यह स्टार्टअप पर एक बार निकाल दिया गया और फिर कभी नहीं निकाल दिया। हालांकि मैं समाधान प्राप्त करता हूं :) समाधान यहां रहता है: http://stackoverflow.com/a/4708172/970420 रिक ने कहा कि हमें कहानी बोर्ड शुरू करना चाहिए ताकि इसकी सबसे कम प्राथमिकता हो। तो मैंने 'शून्य BeginStoryboardAction() {sb.Begin() जोड़ा; } 'और इस तरह से स्थगित कॉलिंग:' डिस्पैचर.बिनजिन इनवोक (नई एक्शन (BeginStoryboardAction), डिस्पैचर प्रिरिटी.कॉन्टेक्स्ट इडल); यह भारी लोडिंग उपयोगकर्ता नियंत्रण के लिए भी एक आकर्षण की तरह काम करता है :) –

0

जो कोड सही होने के बाद घटक बनाया जा रहा निष्पादित करने के लिए एक सामान्य तरीके के लिए देख रहे हैं, लेकिन इससे पहले कि वे गाया जाता है LayoutUpdated घटना में मदद करता है उन लोगों के लिए। यह खिड़कियों के अंदर और उपयोगकर्ता या कस्टम नियंत्रण के अंदर काम करना चाहिए।

संबंधित मुद्दे