2009-05-07 13 views
8

.net कोड से स्टोरीबोर्ड को रोकने और पुनरारंभ करने का उचित तरीका क्या है?एक WPF स्टोरीबोर्ड को पुनरारंभ करना

मैं कोशिश कर रहा हूँ

...

myStory.Stop(this); 

उम्मीद है कि .Begin को बाद में एक कॉल (this); शून्य पर टाइमलाइन से पुनरारंभ होगा, लेकिन इसके बजाय, स्टोरीबोर्ड ठीक से उठाता है जहां इसे रोक दिया गया था।

मैं

.Remove(this); 

की कोशिश की है और मैं

.Seek(TimeSpan.Zero); 

जो भी काम नहीं किया की कोशिश की।

अधिक जानकारी ... यहां मेरा स्टोरीबोर्ड नमूना है।

<Storyboard x:Key="overlay"> 
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textone" Storyboard.TargetProperty="(UIElement.Opacity)"> 
     <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="0"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="1"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="1"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="0"/> 
    </DoubleAnimationUsingKeyFrames> 
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="texttwo" Storyboard.TargetProperty="(UIElement.Opacity)"> 
     <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="0"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="1"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="1"/> 
     <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="0"/> 
    </DoubleAnimationUsingKeyFrames> 
</Storyboard> 

तो textone में पाठ चलाता है, और यदि आप जल्दी से स्क्रीन बंद करें, और स्क्रीन पर लौटने, texttwo, वास्तव में एक नव शुरू कर दिया स्टोरीबोर्ड से अधिक निभाता है। तो मूल (पहली स्क्रीन से) स्टोरीबोर्ड अभी भी चारों ओर और खेल रहा है, भले ही मैंने हटा दिया हो और इसे रोक दिया हो।

+0

शायद यह मेरा सेटअप है। यहां थोड़ी अधिक जानकारी दी गई है। मेरे पास स्टोरीऑवरले स्टोरीबोर्ड संपत्ति के साथ बेसक्लास है। एक बाल वर्ग के सीटीआर में, मैं स्टोरीबोर्ड के रूप में एक कहानीऑवरले = TryFindResource ("storyId") करता हूं; बाद में, मैं कहानी देख रहा हूं अगर कहानी ओवरले! = शून्य; {storyOverlay.Remove (यह); } क्या यह कुछ भी बदलता है? – ScottCate

उत्तर

8

स्टोरीबोर्ड.Seek (TimeSpan.Zero) का उपयोग करने के बारे में क्या? स्ट्रीम में खोज करने के समान, यह आपको एनीमेशन की शुरुआत में वापस लाएगा।

मैंने टिप्पणी की कि आपको यह भी सुनिश्चित करना चाहिए कि IsControllable संपत्ति सत्य पर सेट है। यह याद रखना!

Storyboard.Seek method

+0

इसके अलावा, यह सुनिश्चित करने की आवश्यकता है कि IsControllable सत्य पर सेट है और उचित युक्त ऑब्जेक्ट चिह्नित है। – Rob

+0

धन्यवाद! यह वही है जो मैं बाद में था !!!! – ScottCate

3

आपको myStory.Begin (यह) को स्क्रैच से शुरू करने से पहले myStory.Remove (this) करना होगा। ऐसा इसलिए है क्योंकि स्टोरीबोर्ड को कॉल करना :: स्टॉप सिर्फ एनीमेशन घड़ियों को रोकता है, लेकिन उन्हें बरकरार रखता है। शुरू करने के लिए एक अगली कॉल, बस फिर से शुरू करने के रूप में कार्य करेगा। मैं मानता हूँ कि यह कुछ हद तक counterintuitive है, फिर भी अगर आप प्रलेखन ClockController::Stop पढ़ा, तो आप टिप्पणी में निम्नलिखित देखेंगे:

इस विधि लक्ष्य घड़ी की CurrentState बदलता है रूका है।

एक रूका घड़ी शुरू, शोध, या SeekAlignedToLastTick पद्धति का उपयोग करके द्वारा पुन: प्रारंभ कर सकते हैं।

+0

मेरे बारे में सही लगता है। –

+0

यह अभी भी मेरे लिए काम नहीं कर रहा है। मैं दोनों myStory.Remove (यह) और myStory.Stop (यह), अगर दृश्य स्क्रीन खत्म हो जाने से पहले, दृश्य स्क्रीन पर वापस आता है, आखिरी (शायद इसे मूल कहने के लिए बेहतर) स्टोरीबोर्ड अभी भी खेल रहा है। – ScottCate

0

क्षमा स्कॉट, मैं ध्यान नहीं दिया गया था। क्या आपने स्टोरीबोर्ड पर फिलबैवियर सेट करने का प्रयास किया था। एनीमेशन रीसेट करने के लिए भरने के लिए FillBehavior सेट करें। सुनिश्चित नहीं हैं कि क्यों बंद करो यह हालांकि ऐसा नहीं करता है ...

0
<Storyboard x:Key="overlay"> 
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="textone" Storyboard.TargetProperty="(UIElement.Opacity)"> 
    <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="0"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:03.0" Value="1"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="1"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:06.0" Value="0"/> 
</DoubleAnimationUsingKeyFrames> 
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="texttwo" Storyboard.TargetProperty="(UIElement.Opacity)"> 
    <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="0"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:07.0" Value="1"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="1"/> 
    <SplineDoubleKeyFrame KeyTime="00:00:10.0" Value="0"/> 
</DoubleAnimationUsingKeyFrames> 

using System.Windows.Media.Animation; 

तो नया स्टोरीबोर्ड

Storyboard storyboard_name = (Storyboard)(FindResource("overlay")); 
storyboard_name.Begin(); 

स्टोरीबोर्ड "storyboard_name" बनाने शुरू कर देंगे।

अगर आप स्टोरीबोर्ड को रोकना चाहते हैं।इस

storyboard_name.Stop(); 

तरह से प्रयास करें आप storyboard.please हो सकता है इस

storyboard_name.Remove(); 
-1

अन्य विवरण की तरह की कोशिश को निकालना चाहते हैं:

this.MyAnimation.FillBehavior = FillBehavior.Stop;