WPF

2009-10-05 11 views
10

में एक एनीमेशन gif प्रदर्शित करें, मैं एक एनीमेशन gif को लोड करना चाहता हूं जैसे लोडिंग ... मेरे XAML में मेरी प्रक्रिया प्रगति कर रही है। मैंने पाया कि यह आसानी से WPF में नहीं किया जा सकता क्योंकि मैंने अपना जीआईफ़ लोड किया था और यह सिर्फ पहला फ्रेम दिखाता है। WPF में एनीमेशन प्रदर्शित करने के सर्वोत्तम तरीके क्या हैं।WPF

<wfi:WindowsFormsHost> 
     <winForms:PictureBox x:Name="pictureBoxLoading"> 
     </winForms:PictureBox> 
    </wfi:WindowsFormsHost> 

हालांकि, मैं WPF में यह करने के लिए एक तरह से खोजने की सलाह देते हैं:

+0

के संभावित डुप्लिकेट जारी रखें [मैं एक एनिमेटेड GIF WPF में काम करने के लिए कैसे मिलता है?] (Http://stackoverflow.com/questions/210922/how-do-i- get-an-एनिमेटेड-gif-to-work-in-wpf) –

+0

[ListView के शीर्ष पर "लोड हो रहा है" - जोड़ना जोड़ें (http://stackoverflow.com/questions/1492096/adding-loading-image-on- टॉप-ऑफ-लिस्टव्यू) – hakre

उत्तर

1

आप एक MediaElement

<MediaElement LoadedBehavior="Play" Source="path/to.file" /> 

या WinForms PictureBox एम्बेड कर सकता है। स्टोरीबोर्ड और एनिमेशन पर एक नज़र डालें। यह जानने के बिना कि आप क्या हासिल करने की कोशिश कर रहे हैं या आप ऐसा क्यों करना चाहते हैं, आगे बढ़ना मुश्किल है।

5

मुझे यह समस्या थी, जब तक मुझे पता चला कि WPF4 में, आप अपनी खुद की कीफ्रेम छवि एनिमेशन अनुकरण कर सकते हैं। सबसे पहले, अपनी एनीमेशन को छवियों की एक श्रृंखला में विभाजित करें, उन्हें "Image1.gif", "Image2, gif", और इसी तरह कुछ शीर्षक दें। उन छवियों को अपने समाधान संसाधनों में आयात करें। मुझे लगता है कि आप उन्हें छवियों के लिए डिफ़ॉल्ट संसाधन स्थान में डाल रहे हैं।

आप छवि नियंत्रण का उपयोग करने जा रहे हैं। निम्नलिखित एक्सएएमएल कोड का प्रयोग करें। मैंने गैर-अनिवार्यताओं को हटा दिया है।

<Image Name="Image1"> 
    <Image.Triggers> 
     <EventTrigger RoutedEvent="Image.Loaded" 
     <EventTrigger.Actions> 
      <BeginStoryboard> 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames Duration="0:0:1" Storyboard.TargetProperty="Source" RepeatBehavior="Forever"> 
         <DiscreteObjectKeyFrames KeyTime="0:0:0"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image1.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrames> 
        <DiscreteObjectKeyFrames KeyTime="0:0:0.25"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image2.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrames> 
        <DiscreteObjectKeyFrames KeyTime="0:0:0.5"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image3.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrames> 
        <DiscreteObjectKeyFrames KeyTime="0:0:0.75"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image4.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrames> 
        <DiscreteObjectKeyFrames KeyTime="0:0:1"> 
         <DiscreteObjectKeyFrame.Value> 
          <BitmapImage UriSource="Images/Image5.gif"/> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrames> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger.Actions> 
     </EventTrigger> 
    </Image.Triggers> 
</Image> 
+1

मैंने इसे विंडोज फोन गेम के लिए अपनाया था, जिस पर मैं काम कर रहा था, और यह एक इलाज किया! (आपको याद है, आप इसे 'EventTrigger' के साथ नहीं कर सकते हैं, लेकिन कोड को सामान्य स्टोरीबोर्ड में ले जाएं) – GONeale

+0

मुझे "DiscreteObjectKeyFrames WPF में समर्थित नहीं हैं" त्रुटि मिलती है। –

0

.gif फ़ाइल पर सीधे शब्दों में राइट क्लिक और दो गुणों को बदलने:

बिल्ड कार्रवाई: एंबेडेड संसाधन

आउटपुट निर्देशिका में प्रतिलिपि: कॉपी करता है, तो नया

फिर

<MediaElement x:Name="myGif" UnloadedBehavior="Manual" Source="giphy_s.gif" MediaEnded="MediaElement_MediaEnded"/> 

और सेट घटना के लिए चल रहा है

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e) 
     { 
      myGif.Position = new TimeSpan(0, 0, 1); 
      myGif.Play(); 
     } 
संबंधित मुद्दे