using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace WpfApp1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent(); imgSlider = new Image() { Stretch = Stretch.UniformToFill };
rootGrid.Children.Add(imgSlider);
LoadMedias(); sb = new Storyboard()
{
Duration = TimeSpan.FromSeconds(3)
}; DoubleAnimation t = new DoubleAnimation()
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(1)
}; Storyboard.SetTarget(t,imgSlider);
Storyboard.SetTargetProperty(t, new PropertyPath("Opacity"));
sb.Children.Add(t);
sb.Completed += Sb_Completed;
Loaded += MainWindow_Loaded;
}
int mediaIndex = 0;
List<string> mediaList = new List<string>();
Storyboard sb;
Image imgSlider;
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Play();
} private void Sb_Completed(object sender, EventArgs e)
{
Debug.Print("Sb_Completed");
Play();
}
private void Play()
{ if (mediaIndex >= mediaList.Count)
{
mediaIndex = 0;
}
sb.Stop();
var url = mediaList[mediaIndex];
BitmapImage bmp = new BitmapImage(new Uri(url, UriKind.RelativeOrAbsolute));
imgSlider.Source = bmp;
sb.Begin();
mediaIndex++; } private void LoadMedias()
{
var files = Directory.GetFiles(@"d:\Pictures\CryptoArt\Collection", "*.jpg").Take(5);
mediaList.AddRange(files); } }
}

  

视频和图片混播:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace WpfApp1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
player.MediaEnded += Player_MediaEnded;
imgSlider = new Image() { Stretch = Stretch.UniformToFill };
rootGrid.Children.Add(imgSlider);
LoadMedias(); sb = new Storyboard()
{
Duration = TimeSpan.FromSeconds(3)
}; DoubleAnimation t = new DoubleAnimation()
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(1)
}; Storyboard.SetTarget(t,imgSlider);
Storyboard.SetTargetProperty(t, new PropertyPath("Opacity"));
sb.Children.Add(t);
sb.Completed += Sb_Completed;
Loaded += MainWindow_Loaded;
} private void Player_MediaEnded(object sender, RoutedEventArgs e)
{
Play();
} int mediaIndex = 0;
List<string> mediaList = new List<string>();
Storyboard sb;
Image imgSlider;
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Play();
} private void Sb_Completed(object sender, EventArgs e)
{
Debug.Print("Sb_Completed");
Play();
}
private void Play()
{ if (mediaIndex >= mediaList.Count)
{
mediaIndex = 0;
}
sb.Stop();
var url = mediaList[mediaIndex];
if (url.EndsWith(".jpg"))
{
PlayImage(url);
}
else {
sb.Stop();
imgSlider.Visibility = Visibility.Collapsed; player.Visibility = Visibility.Visible;
player.Source = new Uri(url,UriKind.RelativeOrAbsolute);
player.Play(); }
mediaIndex++; } private void PlayImage(string url)
{
player.Stop();
player.Visibility = Visibility.Collapsed; sb.Stop();
BitmapImage bmp = new BitmapImage(new Uri(url, UriKind.RelativeOrAbsolute));
imgSlider.Source = bmp;
imgSlider.Visibility = Visibility.Visible;
sb.Begin(); } private void LoadMedias()
{
var files = Directory.GetFiles(@"d:\Pictures\TestMedia");
mediaList.AddRange(files); } }
}

  

UI:

<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="1920" Width="1080">
<Grid Name="rootGrid" Background="BlueViolet">
<MediaElement Name="player" LoadedBehavior="Manual" />
</Grid>
</Window>

  

有的电脑会出现诡异现象:Sb_Completed 不触发!。。。。。。。。。不是不得骑姐。

WPF Play Image slider animation using Storyboard的更多相关文章

  1. 示例:WPF中自定义StoryBoarService在代码中封装StoryBoard、Animation用于简化动画编写

    原文:示例:WPF中自定义StoryBoarService在代码中封装StoryBoard.Animation用于简化动画编写 一.目的:通过对StoryBoard和Animation的封装来简化动画 ...

  2. WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制

    无论是 WPF 还是 UWP 开发,如果用 Storyboard 和 Animation 做动画,我们多数时候都会设置 From 和 To 属性,用于从起始值动画到目标值.然而动画并不总是可以静态地指 ...

  3. WPF.UIShell UIFramework之自定义窗口的深度技术 - 模态闪动(Blink)、窗口四边拖拽支持(WmNCHitTest)、自定义最大化位置和大小(WmGetMinMaxInfo)

    无论是在工作和学习中使用WPF时,我们通常都会接触到CustomControl,今天我们就CustomWindow之后的一些边角技术进行探讨和剖析. 窗口(对话框)模态闪动(Blink) 自定义窗口的 ...

  4. WPF之小动画一

    定义动画: 直接使用Element进行BeginAnimation DoubleAnimation animation = new DoubleAnimation(); animation.By = ...

  5. WPF中反转3D列表项

    原文:WPF中反转3D列表项 WPF中反转3D列表项                                                         周银辉记得在苹果电脑中有一个很酷的 ...

  6. [No000012F]WPF(7/7) - 样式,触发器和动画

    WPF Tutorial : Beginning [^] WPF Tutorial : Layout-Panels-Containers & Layout Transformation [^] ...

  7. 实现一个 WPF 版本的 ConnectedAnimation

    Windows 10 的创造者更新为开发者们带来了 Connected Animation 连接动画,这也是 Fluent Design System 的一部分.它的视觉引导性很强,用户能够在它的帮助 ...

  8. WPF/WP/Silverlight/Metro App代码创建动画的思路

    在2010年之前,我都是用Blend创建动画,添加触发器实现自动动画,后来写成代码创建的方式.如今Blend已经集成到Visual Studio安装镜像中了,最新的VS2015安装,Blend的操作界 ...

  9. WPF动画的几种模式

    最近在用WPF做简单动画,以下是几点经验总结: 1. 使用DispatcherTimer做动画 VB6的年代大家就用Timer做动画了,不用多解释,这个DispatcherTimer和本身的Timer ...

  10. [WPF自定义控件库]了解WPF的布局过程,并利用Measure为Expander添加动画

    1. 前言 这篇文章介绍WPF UI元素的两步布局过程,并且通过Resizer控件介绍只使用Measure可以实现些什么内容. 我不建议初学者做太多动画的工作,但合适的动画可以引导用户视线,提升用户体 ...

随机推荐

  1. SQL Server创建用户只能访问指定数据库和视图

    我们在给数据库用户赋予权限时,有时候不想让该用户看到太多过程表和过程视图,这时就需要限定用户的访问权限 第一步:创建用户 创建数据库连接后,进入安全性--登录名,单击右键,新建登录名,并设置默认数据库 ...

  2. 今日一学,5道大厂的Java基础面试题

    前言 各种框架眼花缭乱,各种逻辑需求,CRUD.久而久之,写的1000行代码中都是if else,@autowired等等,等出去面试的时候,基础题不断,而且还是不常用,或者说不在意的,往往这些就容易 ...

  3. 一文彻底弄懂Spring IOC 依赖注入

    Spring IOC(Inversion of Control,控制反转)依赖注入是 Spring 框架的核心特性之一,旨在实现对象之间的松耦合,提升代码的可维护性.可测试性和可扩展性.下面我们将从以 ...

  4. Windows通过修改注册表设置系统默认浏览器

    前段时间有个程序要求获取系统的默认浏览器,baidu.Google了好久,后又结合procmon.exe跟踪浏览器打开web页面的注册表操作信息,找到了最终的位置,这里做一个总结.亲测win10多个浏 ...

  5. 2023NOIP A层联测28 T4 小猫吃火龙果

    2023NOIP A层联测28 T4 小猫吃火龙果 分块题,跟赛时的一个倍增部分分做法很像. 思路 如果没有动态操作,可以设 \(dp[i][T][k]\) 为:在 \(i\) 时为 \(T(T\in ...

  6. 鸿蒙NEXT开发案例:数字转中文大小写

    [引言] 本应用的主要功能是将用户输入的数字转换为中文的小写.大写及大写金额形式.用户可以在输入框中输入任意数字,点击"示例"按钮可以快速填充预设的数字,点击"清空&qu ...

  7. docker部署java项目

    1.首先你需要提前准备好jar包或者war包,并想办法放入Linux环境(或虚拟机)中: 2.java项目的部署需要用到Tomcat或者Jetty,docker可以直接拉取他俩的镜像,这里以Tomca ...

  8. Python:pygame游戏编程之旅二(自由移动的小球)

    本节实现一个在窗口中自由运动的小球程序,做了详细注释,不多做解释了. 代码: # -*- coding:utf-8 -*- import sys import pygame from pygame.l ...

  9. 子组件监听props中的值,监听不到旧值的相关问题

    昨天,在项目中做一个功能,一个tab切换,点击其中一个tab的时候,调用组件中的查询方法,切只调用一次.再次切换的时候不再调用. 我的做法是: 在父组件中创建一个变量,初始化data中设为0,在点击t ...

  10. PowerShell一键下载Nuget某个包的所有版本

    一转眼好几年没有写博客了,来博客园冒个泡,最近由于工作需要,内网办公,幸运的是只需要上传一个*.nupkg一个包信息就可以在私有nuget下载到了,下面就用PowerShell编写下载脚本,需要注意的 ...