WPF

2012-04-18 14 views
6

में उपयोगकर्ता नियंत्रण में एनिमेशन को सिंक्रनाइज़ करने के लिए कैसे मैं एक रैप पैनल में कई उपयोगकर्ता नियंत्रण बना रहा हूं। मेरे पास उपयोगकर्ता नियंत्रण के लिए एक दृश्य मॉडल है और मेरे पास दृश्य मॉडल में एक संपत्ति के लिए एक एनीमेशन ट्रिगर किया गया है। फ्लैशिंग अनुकरण करने के लिए लाल से पारदर्शी रंग का बहुत ही सरल टॉगल रंग।WPF

<Storyboard x:Key="alertAnimation" RepeatBehavior="Forever" AutoReverse="True" > 
    <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" 
            Storyboard.TargetName="TileBorder" 
            BeginTime="00:00:00" 
            RepeatBehavior="Forever" 
            AutoReverse="True" 
            > 
     <DiscreteColorKeyFrame Value="Red"/> 
     <DiscreteColorKeyFrame KeyTime="00:00:00.500" Value="Transparent" /> 
    </ColorAnimationUsingKeyFrames> 

</Storyboard> 

यह ठीक काम करता है। हालांकि, चूंकि मैं कई उपयोगकर्ता नियंत्रण को असीमित रूप से लोड करता हूं क्योंकि ब्लिंकिंग एनिमेशन सिंक्रनाइज़ नहीं होते हैं, इसलिए वे सभी अलग-अलग समय पर झपकी देते हैं। अब एक आवश्यकता है कि स्क्रीन पर झपकी देने वाली किसी भी चीज को एक ही दर/समय पर झपकी की जरूरत है। क्या इन एनिमेशन को सिंक करने का कोई तरीका है? मुझे ऐसा कोई उदाहरण नहीं मिल रहा है जो कि मैं पूरा करने की कोशिश कर रहा हूं। क्या समानांतर टाइमलाइन का उपयोग करने का कोई तरीका है, इसमें सभी एनिमेशन जोड़ें और उन्हें एक नियंत्रक से प्रारंभ/रोकें? कोई उदाहरण यह है कि इसे कैसे पूरा किया जाए?

संपादित करें 4/20 क्या एनीमेशन को style.xaml फ़ाइल में परिभाषित करना बेहतर होगा और "ग्लोबल" स्टोरीबोर्ड होगा कि प्रत्येक नियंत्रण अपनी "ब्लिंक" एनीमेशन जोड़ता है और मुख्य यूआई स्टोरीबोर्ड शुरू करता है?

+0

आपको नियंत्रण एसिंच लोड करने की आवश्यकता क्यों है? – Paparazzi

+0

वास्तव में दिखने के लिए। मैंने पाया कि अगर मैंने उन्हें सिंक्रनाइज़ किया तो एप्लिकेशन तब तक लटकने लगा जब तक कि सभी नियंत्रण लोड नहीं हो जाते। साथ ही, जब सभी प्रारंभिक उपयोगकर्ता नियंत्रण लोड हो जाते हैं तो कोई भी किसी भी डिवाइस पर प्रदर्शित होने के बाद किसी भी समय प्रकट हो सकता है। मैंने सोचा कि मुझे उस मामले को हल करने की भी आवश्यकता है। – mdutra

+0

एक साधारण एनीमेशन की तरह लगता है लेकिन मैं कुंजी फ्रेम पर अलग कोशिश करता हूं। – Paparazzi

उत्तर

0

स्पष्ट रूप से इसे संशोधित करने की आवश्यकता होगी लेकिन रंग संक्रमण पर 0 की अवधि का प्रयास करने से आपको कम ओवरहेड के साथ एक झपकी मिल सकती है। और यह नहीं हो सकता है। कोशिश करने के लिए बस कुछ।

<Rectangle Name="MyRectangle" Width="100" Height="100"> 
     <Rectangle.Fill> 
      <SolidColorBrush x:Name="MySolidColorBrush" Color="Blue" /> 
     </Rectangle.Fill> 
     <Rectangle.Triggers> 
      <EventTrigger RoutedEvent="Rectangle.MouseEnter"> 
       <BeginStoryboard> 
        <Storyboard> 
         <DoubleAnimation 
      Storyboard.TargetName="MyRectangle" 
      Storyboard.TargetProperty="Width" 
      From="100" To="200" Duration="0:0:1" /> 

         <ColorAnimation 
      Storyboard.TargetName="MySolidColorBrush" 
      Storyboard.TargetProperty="Color" 
      From="Blue" To="Red" BeginTime="0:0:1" Duration="0:0:0" /> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Rectangle.Triggers> 
    </Rectangle> 
3

मैं कई usercontrols तो मैं usercontrol में एनीमेशन का उपयोग नहीं बल्कि एक एनीमेशन का उपयोग केवल एक स्थिर वस्तु में एक DependencyProperty बदलने के लिए समाप्त हो गया में एक साथ कई एनिमेशन नियंत्रित करने के लिए एक अच्छा तरीका नहीं मिल रहा है और सभी usercontrols हो सकता है उस संपत्ति से बंधे कुछ फैशन में झपकी की जरूरत है। इच्छित वांछित परिणाम उत्पन्न करने के कई तरीके हैं, लेकिन आखिर में अब मेरे सभी नियंत्रणों के बारे में जानने का एक तरीका था जब ब्लिंक चालू था और फिर बंद हो गया ताकि सब कुछ सिंक्रनाइज़ हो।

मैं निम्नलिखित साइट से विचार और नमूना कोड मिला: How to synchronize animations across usercontrols in wpf

मैं इसे करने के लिए कुछ सुधार किए हैं लेकिन कुल मिलाकर यह वास्तव में क्या मैं यह करने के लिए आवश्यक था।

+0

यही वह क्षण है जो मैं इस समय जा रहा हूं। मैं सिर्फ एनिमेशन का उपयोग करने की उम्मीद कर रहा था। ठीक है। –

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