加载动画图像

时间:2011-09-05 13:22:22

标签: c# wpf image xaml animation

我想知道在下载图像时显示加载动画的最佳方法是什么。

我有一张从互联网网址动态加载的图片。所以我在看到我的图像之前有大约1/2秒,我认为这取决于连接。因此,我想在图像仍在下载时为用户显示动画。

坦克为您的建议

3 个答案:

答案 0 :(得分:1)

我终于通过使用VM(MVVM)解决了我的问题。我解释一下是否有人遇到同样的麻烦:

首先,我的视图中有Listbox,它连接到ViewModel中的List。我所做的是将命令连接到事件SelectionChanged,如下所示:

<ListBox x:Name="EbookBox" ItemTemplate="{StaticResource ListItemTemplate}" Height="505" ItemsSource="{Binding OBooks, Mode=OneWay}" SelectedItem="{Binding SelectedBook, Mode=TwoWay}">
   <i:Interaction.Triggers>
      <i:EventTrigger EventName="SelectionChanged">
         <cmd:EventToCommand Command="{Binding LoadCoverCommand, Mode=OneWay}" />
      </i:EventTrigger>
   </i:Interaction.Triggers>
</ListBox>

然后在我的函数Load cover中,我构建了封面的url并创建了一个bitmapImage。但之前,我初始化一个布尔值来说它正在加载:

IsLoadingCover = true;
// Create the Bitmap and save it to the caching directory
CurrentCover = new BitmapImage(new Uri(cover));
CurrentCover.DownloadCompleted += DownloadCompleted;

最后,当图像下载时,我将加载指示设为false。 在我的视图中,我的控件只有在IsLoadingCover为真时才可见(Bool到Visibility Converter):

<control:LoadingAnimation HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,123,0,0" Visibility="{Binding IsLoadingCover,Converter={StaticResource BoolToVisibilityConverter}}"/>

答案 1 :(得分:0)

您可以添加WindowsFormHost来保存GIF动画并根据需要显示/隐藏主机。

xmlns:winFormInteg="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:winForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"      
<winFormInteg:WindowsFormsHost
     Width="15"
     Height="15"
     Name="window_lading_anim"
     Loaded="OnWindowLoaded">
     <winForms:PictureBox x:Name="pictureBoxLoading"/>
</winFormInteg:WindowsFormsHost>

在OnWindowLoaded方法中,在Winform主机控件中设置动画图像

private void OnWindowLoaded(object sender, RoutedEventArgs e)
{
  pictureBoxLoading.Image = Properties.Resources.myAnimatedGif;
}

答案 2 :(得分:0)

如果您想在执行其他工作(例如下载图像)时更改GUI,则应异步下载图像。

有几种方法可以做到这一点,例如使用BackgroundWorker类(在单独的线程上)或者,根据您用于下载图像的内容,在同一个线程上异步(这可能是一个更好的主意)。