XAML

2012-06-14 24 views
5

में परिभाषित और शुरू की गई स्टोरीबोर्ड पर GetCurrentState मैंने पूरी खोज की है और इस पर कोई जवाब नहीं मिल रहा है। मेरा ऐप ढीला एक्सएएमएल की दुनिया में रहता है, इसलिए तत्वों को ढूंढने के लिए XamlReaders और पेड़ चलने पर भरोसा करना पड़ता है। मेरे पास एक घटक है जो इन एक्सएएमएल पृष्ठों के प्रतिपादन को संभालता है। उस रेंडरर को स्टोरीबोर्ड की स्थिति जानने की जरूरत है जो लोड किए गए एक्सएएमएल पर चल रहा है। तो क्या मैं अपने रेंडरर में क्या करना चाहते हैं कुछ इस तरह है: -XAML

var resources = _currentScreenFrameworkElement.Resources; 
foreach (var item in resources.Values) 
{ 
    if (item is Storyboard) 
    { 
     try 
     { 
      var storyboard = item as Storyboard; 
      **if (storyboard.GetCurrentState() == ClockState.Active)** 

सभी अच्छी तरह से और अच्छा। हालांकि समस्या यह है जब मैं एक dcheck CurrentState यह एक अपवाद फेंकता कोशिश: -

"Cannot perform action because the specified Storyboard was not applied to this object for interactive control." 

चारों ओर देख रहे हैं मैं देख रहा हूँ क्योंकि मैं स्टोरीबोर्ड चलाया बनाने की जरूरत है बस। तो मेरा सवाल यह है कि मैं एक्सएएमएल में ऐसा कैसे करूं? मैं कोडबोर्ड में कोडबोर्ड शुरू नहीं करता हूं इसलिए ओवरलोडेड BeginStoryboard में सच नहीं हो सकता है।

उत्तर

5

मैं बस इसी समस्या में भाग गया इसलिए मुझे लगा कि मैं अपने निष्कर्ष साझा करूंगा।

आपको वह त्रुटि मिलती है जब आपकी स्टोरीबोर्ड को नियंत्रित करने योग्य के रूप में चिह्नित नहीं किया जाता है। स्टोरीबोर्ड को प्रारंभिक विधि के रूप में चिह्नित किया जाता है जब प्रारंभ विधि कहा जाता है।

यदि आप इसे कोड से कर रहे हैं तो आप केवल एक अधिभार का उपयोग करें जिसमें IsControllable बूलियन तर्क (list of Begin overloads) है।

यदि आपने Xaml में BeginAnimation तत्व का उपयोग किया है तो आपको 2 चीजें करने की आवश्यकता होगी।

  1. BeginAnimation तत्व में Name असाइन करें। इस संपत्ति के लिए documentation कहता है: "यदि स्टार्टबोर्डबोर्ड का नाम अनिर्दिष्ट है, तो स्टोरीबोर्ड को शुरू होने के बाद इंटरैक्टिव रूप से प्रभावित नहीं किया जा सकता है"
  2. जब आप कोडबोर्ड में अपने स्टोरीबोर्ड से बातचीत करने का प्रयास कर रहे हैं तो आपको संदर्भ में जाना होगा उद्देश्य यह है कि आपके BeginStoryboard में घोषित किया गया था।

यहाँ आप कदम 1 दिखा एक उदाहरण है (beginstoryboard नाम)

<Button Name="btn1" Content="bla"> 
    <Button.Triggers> 
    <EventTrigger RoutedEvent="Button.Click"> 
     <BeginStoryboard 
      Name="bnt1_beginStoryboard" 
      Storyboard={StaticResource someSharedStoryboard}"/> 
    </EventTrigger> 
    </Button.Triggers> 
</Button> 

और यहाँ चूंकि आप अपने नाम दिया है beginStoryboard आप कर सकते हैं कदम 2. के लिए एक उदाहरण है अपने वर्ग में स्थानीय चर के रूप में इसका उपयोग करें .. या आप बस कर सकते हैं वास्तविक स्टोरीबोर्ड को सीधे संदर्भित करें। मुख्य मुद्दा यह है कि आप beginStoryboard के मालिक में से गुजरना होगा

//The main point here is that we're passing in btn1 
bnt1_beginStoryboard.Storyboard.Stop(btn1); 
bnt1_beginStoryboard.Storyboard.SkipToFill(btn1); 
bnt1_beginStoryboard.Storyboard.Resume(btn1); 

यहाँ सब "कार्रवाई" एक स्टोरीबोर्ड पर है कि आप की आवश्यकता होती है तरीकों में पारित करने के लिए की एक सूची है (जो इस मामले में बटन है) फ्रेमवर्क तत्व का मालिकाना: Control a Storyboard After It Starts

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