Загрузка анимационных изображений - PullRequest
1 голос
/ 05 сентября 2011

Я хотел бы знать, как лучше всего показать анимацию загрузки при загрузке изображения.

У меня есть изображение, которое загружается динамически с URL-адреса в Интернете.Таким образом, у меня есть около 1/2 секунды, прежде чем я вижу свое изображение, и я думаю, что это зависит от связи.Поэтому я хотел бы показать анимацию для пользователя во время загрузки изображения.

Резервуары для ваших предложений

Ответы [ 3 ]

1 голос
/ 12 сентября 2011

Я наконец решил свою проблему с помощью виртуальной машины (MVVM). Я объясняю, если у кого-то есть такая же проблема:

Сначала у меня есть Listbox, который связан со списком в моей ViewModel. Я подключил команду к событию 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 имеет значение true (Bool to Visibility Converter):

<control:LoadingAnimation HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,123,0,0" Visibility="{Binding IsLoadingCover,Converter={StaticResource BoolToVisibilityConverter}}"/>
0 голосов
/ 06 сентября 2011

Если вы хотите изменить свой графический интерфейс во время выполнения другой работы, например, загрузки изображения, вам следует загрузить изображение асинхронно.

Есть несколько способов сделать это, например, с помощью класса BackgroundWorker (onотдельный поток) или, в зависимости от того, что вы используете для загрузки изображения, асинхронно в том же потоке (что может быть лучше).

0 голосов
/ 05 сентября 2011

Вы можете добавить 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...