переход изображения - PullRequest
       12

переход изображения

0 голосов
/ 12 января 2011

Я снова застрял.

Я создаю проект WPF на C # ...

У меня есть изображение (обложка альбома), которое я буду менять в коде, и хочу сделать следующее:

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

Я не вижу много хороших примеров того, как это сделать в коде.

Следующее было моей последней неудачной попыткой ...

if (currentTrack != previousTrack) 
{
    BitmapImage image = new BitmapImage();
    image.BeginInit();
    image.CacheOption = BitmapCacheOption.OnLoad;
    image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
    image.UriSource = new Uri(Address, UriKind.Absolute);
    image.EndInit();

    Storyboard MyStoryboard = new Storyboard();

    DoubleAnimation FadeOut = new DoubleAnimation();
    FadeOut.From = 1.0;
    FadeOut.To = 0.0;
    FadeOut.Duration = new Duration(TimeSpan.FromSeconds(.5));

    MyStoryboard.Children.Add(FadeOut);
    Storyboard.SetTargetName(FadeOut, CoverArt.Name);
    Storyboard.SetTargetProperty(FadeOut, new PropertyPath(Rectangle.OpacityProperty));

    CoverArt.Source = image;

    DoubleAnimation Fadein = new DoubleAnimation();
    Fadein.From = 0.0;
    Fadein.To = 1.0;
    Fadein.Duration = new Duration(TimeSpan.FromSeconds(.5));

    MyStoryboard.Children.Add(Fadein);
    Storyboard.SetTargetName(Fadein, CoverArt.Name);
    Storyboard.SetTargetProperty(Fadein, new PropertyPath(Rectangle.OpacityProperty));

    MyStoryboard.Begin(this);
}

Я бы предпочел сделать это в коде просто потому, что именно здесь я получаю изображение. В противном случае, я не уверен, как бы это вызвать.

Пример был бы очень признателен.

Ответы [ 2 ]

1 голос
/ 12 января 2011

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

С другой стороны, если вы хотите, чтобы старое изображение исчезло , пока новое изображение исчезает, вам необходимо изменитьдизайн, включающий два изображения, которые занимают одно и то же место на экране, и измените раскадровку на использование ParallelTimeline.

0 голосов
/ 12 января 2011

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

        private void CoverArt_MouseDown(object sender, MouseButtonEventArgs e)
    {
        Storyboard AnimFadeOut = new Storyboard();
        AnimFadeOut.Completed += new EventHandler(ImageFadeOut_Completed);

        DoubleAnimation FadeOut = new DoubleAnimation();
        FadeOut.From = 1.0;
        FadeOut.To = 0.0;
        FadeOut.Duration = new Duration(TimeSpan.FromSeconds(.5));

        AnimFadeOut.Children.Add(FadeOut);
        Storyboard.SetTargetName(FadeOut, CurrentCover.Name);
        Storyboard.SetTargetProperty(FadeOut, new PropertyPath(Image.OpacityProperty));


        AnimFadeOut.Begin(this);
    }

    void ImageFadeOut_Completed(object sender, EventArgs e)
    {
        BitmapImage image = new BitmapImage();
        image.BeginInit();
        image.CacheOption = BitmapCacheOption.OnLoad;
        image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
        image.UriSource = new Uri("Minogue.jpg", UriKind.Relative);
        image.EndInit();

        CurrentCover.Source = image;
        Storyboard ImageFadeIn = new Storyboard();

        DoubleAnimation FadeIn = new DoubleAnimation();
        FadeIn.From = 0.0;
        FadeIn.To = 1.0;
        FadeIn.Duration = new Duration(TimeSpan.FromSeconds(.5));

        ImageFadeIn.Children.Add(FadeIn);
        Storyboard.SetTargetName(FadeIn, CurrentCover.Name);
        Storyboard.SetTargetProperty(FadeIn, new PropertyPath(Image.OpacityProperty));
        ImageFadeIn.Begin(this);
    }
...