class GifImage : Image
{
private bool _isInitialized;
private GifBitmapDecoder _gifDecoder;
private Int32Animation _animation;
public int FrameIndex
{
get { return (int)GetValue(FrameIndexProperty); }
set { SetValue(FrameIndexProperty, value); }
}
private void Initialize()
{
_gifDecoder = new GifBitmapDecoder(new Uri((this.GifSource.StartsWith("pack://") ? "" : "pack://application:,,,") + this.GifSource), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
var frameinfo = _gifDecoder.Metadata.GetFrameInfo();
var delay = frameinfo.Delay;
_animation = new Int32Animation(0, _gifDecoder.Frames.Count - 1, new Duration(new TimeSpan(0, 0, 0, delay.Seconds * _gifDecoder.Frames.Count + (delay.Milliseconds * _gifDecoder.Frames.Count) / 1000, (delay.Milliseconds * _gifDecoder.Frames.Count) % 1000)));
_animation.RepeatBehavior = RepeatBehavior.Forever;
this.Source = _gifDecoder.Frames[0];
_isInitialized = true;
}
static GifImage()
{
VisibilityProperty.OverrideMetadata(typeof(GifImage),
new FrameworkPropertyMetadata(VisibilityPropertyChanged));
}
private static void VisibilityPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
if ((Visibility)e.NewValue == Visibility.Visib
【WPF】Image控件显示Gif图片
最新推荐文章于 2024-09-27 16:32:01 发布