2009-10-05 58 views
10

Tôi muốn hiển thị gif động như tải ... trong XAML của tôi khi quy trình của tôi đang diễn ra. Tôi phát hiện ra rằng điều này không thể dễ dàng thực hiện trong WPF khi tôi tải Gif của tôi và nó chỉ hiển thị khung đầu tiên. Cách tốt nhất để hiển thị một hình ảnh động trong WPF là gì.hiển thị ảnh động gif trong WPF

+0

thể trùng lặp của [Làm thế nào để tôi nhận được một gif động làm việc trong WPF?] (Http://stackoverflow.com/questions/210922/how-do-i- get-an-animated-gif-to-work-in-wpf) –

+0

[Thêm "Đang tải" ảnh lên trên ListView] (http://stackoverflow.com/questions/1492096/adding-loading-image-on- top-of-listview) – hakre

Trả lời

1

Bạn có thể nhúng một MediaElement

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

hoặc winforms PictureBox:

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

Tuy nhiên, tôi khuyên bạn nên tìm kiếm một cách để làm điều này trong WPF. Có một cái nhìn tại StoryBoards và hình ảnh động. Nếu không biết những gì bạn đang cố gắng đạt được hoặc tại sao bạn muốn làm điều này thật khó để tư vấn thêm.

5

Tôi gặp vấn đề này, cho đến khi tôi phát hiện ra rằng trong WPF4, bạn có thể mô phỏng hoạt ảnh hình ảnh keyframe của riêng mình. Trước tiên, hãy chia hoạt ảnh của bạn thành một loạt hình ảnh, đặt tên cho chúng là "Image1.gif", "Image2, gif", v.v. Nhập những hình ảnh đó vào tài nguyên giải pháp của bạn. Tôi giả sử bạn đặt chúng vào vị trí tài nguyên mặc định cho hình ảnh.

Bạn sẽ sử dụng điều khiển Hình ảnh. Sử dụng mã XAML sau. Tôi đã xóa không cần thiết.

<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

Tôi đã sử dụng tính năng này cho trò chơi Windows Phone mà tôi đang thực hiện và nó đã hoạt động tốt! (Tâm trí bạn, bạn không thể làm điều đó với 'EventTrigger' nhưng chỉ di chuyển mã ra thành một kịch bản thông thường) – GONeale

+0

Tôi nhận được lỗi "DiscreteObjectKeyFrames không được hỗ trợ trong WPF". –

0

Simply Right Click vào .gif tập tin và thay đổi hai thuộc tính:

Build Action: Resource Embedded

Copy To Output Directory: Sao chép nếu đăng Mới hơn

Sau đó

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

và thiết lập tổ chức sự kiện Đối với Tiếp tục chạy

private void MediaElement_MediaEnded(object sender, RoutedEventArgs e) 
     { 
      myGif.Position = new TimeSpan(0, 0, 1); 
      myGif.Play(); 
     } 
Các vấn đề liên quan