在图像控制WPF加载时动画图片 [英] Animate Image when loaded in Image Control WPF
问题描述
我想创建影像的幻灯片播放。为此,我有充足的时间每套间隔后装入图像控制新形象。但每次我加载说到没有任何动画,我需要在出动画的过渡动画或褪色加载每个图像的新形象。我怎样才能实现动画,同时在图像控制变化的图像?以下是code:
XAML:
<网格和GT;
<图像来源={结合CurrentImage}/>
< /网格和GT;
XAML.cs
视图模型=新ScreenSaverViewModel();
this.DataContext =视图模型;
ViewModel.cs
///<总结>
///获取当前图像显示吸引屏幕上。更改这个属性
///导致发出信号PropertyChanged事件
///< /总结>
公共字符串CurrentImage
{
得到
{
返回this.currentImage;
} 保护套
{
this.currentImage =价值;
this.OnPropertyChanged(CurrentImage);
}
} ///<总结>
///获取所有图像的观察的集合。
///< /总结>
公众的ObservableCollection<串GT;图片
{
得到
{
返回this.images;
}
} 公共ScreenSaverViewModel()
{
照片=新的ObservableCollection<串GT;(); this.LoadSlideShowImages(); 如果(图片=空&放大器;!&放大器; Images.Count大于0)
{
this.CurrentImage = this.Images [this.currentIndex] this.tickTimer =新DispatcherTimer();
this.tickTimer.Interval = TimeSpan.FromMilliseconds(TimerIntervalMilliseconds);
this.tickTimer.Tick + =(S,E)=>
{
this.currentIndex ++;
this.currentIndex = this.currentIndex< this.Images.Count? this.currentIndex:0;
this.CurrentImage = this.Images [this.currentIndex]
}; 后映像加载//启动定时器
this.tickTimer.Start();
}
}
我已经创建了我所提出的财产变化的类继承Image控件时的图像控制的变化源。关于这一点我已经申请触发器现在这个工作正常。以下是code:
<控制:ImageControl来源={结合CurrentImage}>
<控制:ImageControl.Triggers>
<的EventTrigger RoutedEvent =控制:ImageControl.SourceChanged>
< BeginStoryboard>
<情节提要>
&所述; DoubleAnimation是Storyboard.TargetProperty =(Image.Opacity)从=0要=1持续时间=0:0:1/>
< /故事板>
< / BeginStoryboard>
< /&的EventTrigger GT;
< /控制:ImageControl.Triggers>
< /控制:ImageControl>
公共类ImageControl:图片
{
公共静态只读RoutedEvent SourceChangedEvent = EventManager.RegisterRoutedEvent(
SourceChanged,RoutingStrategy.Direct的typeof(RoutedEventHandler)的typeof(ImageControl)); 静态ImageControl()
{
Image.SourceProperty.OverrideMetadata(typeof运算(ImageControl),新FrameworkPropertyMetadata(SourcePropertyChanged));
} 公共事件RoutedEventHandler SourceChanged
{
添加{的AddHandler(SourceChangedEvent,值); }
除去{RemoveHandler(SourceChangedEvent,值); }
} 私有静态无效SourcePropertyChanged(OBJ的DependencyObject,DependencyPropertyChangedEventArgs E)
{
形象画像= OBJ为图像;
如果(形象!= NULL)
{
image.RaiseEvent(新RoutedEventArgs(SourceChangedEvent));
}
}
}
I want to create a slideshow of images. For this I have loaded new images in image control after every set interval of time. But each time i load a new image it comes without any animation I need to load each image with a transition animation or fade in-out animation. How can I achieve animation while changing images in Image control? Following is the code:
XAML:
<Grid>
<Image Source="{Binding CurrentImage}" />
</Grid>
XAML.cs
ViewModel = new ScreenSaverViewModel();
this.DataContext = ViewModel;
ViewModel.cs
/// <summary>
/// Gets the current image to display on the attract screen. Changes to this property
/// cause the PropertyChanged event to be signaled
/// </summary>
public string CurrentImage
{
get
{
return this.currentImage;
}
protected set
{
this.currentImage = value;
this.OnPropertyChanged("CurrentImage");
}
}
/// <summary>
/// Gets the observable collection of all images.
/// </summary>
public ObservableCollection<string> Images
{
get
{
return this.images;
}
}
public ScreenSaverViewModel()
{
images = new ObservableCollection<string>();
this.LoadSlideShowImages();
if (Images != null && Images.Count > 0)
{
this.CurrentImage = this.Images[this.currentIndex];
this.tickTimer = new DispatcherTimer();
this.tickTimer.Interval = TimeSpan.FromMilliseconds(TimerIntervalMilliseconds);
this.tickTimer.Tick += (s, e) =>
{
this.currentIndex++;
this.currentIndex = this.currentIndex < this.Images.Count ? this.currentIndex : 0;
this.CurrentImage = this.Images[this.currentIndex];
};
// start the timer after image is loaded
this.tickTimer.Start();
}
}
I have created a class inheriting Image control in which I have raised property change when Source of image control changes. on which I have applied trigger this works fine now. Following is the code:
<controls:ImageControl Source="{Binding CurrentImage}" >
<controls:ImageControl.Triggers>
<EventTrigger RoutedEvent="controls:ImageControl.SourceChanged">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(Image.Opacity)" From="0" To="1" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</controls:ImageControl.Triggers>
</controls:ImageControl>
public class ImageControl : Image
{
public static readonly RoutedEvent SourceChangedEvent = EventManager.RegisterRoutedEvent(
"SourceChanged", RoutingStrategy.Direct, typeof(RoutedEventHandler), typeof(ImageControl));
static ImageControl()
{
Image.SourceProperty.OverrideMetadata(typeof(ImageControl), new FrameworkPropertyMetadata(SourcePropertyChanged));
}
public event RoutedEventHandler SourceChanged
{
add { AddHandler(SourceChangedEvent, value); }
remove { RemoveHandler(SourceChangedEvent, value); }
}
private static void SourcePropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
Image image = obj as Image;
if (image != null)
{
image.RaiseEvent(new RoutedEventArgs(SourceChangedEvent));
}
}
}
这篇关于在图像控制WPF加载时动画图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!