WPF实现轮播图(图片、视屏)

news2025/1/16 15:39:27

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:WPF 案例及知识分享专栏
✨特色专栏:乐趣国学-心性养成之路
🥭本文内容:WPF实现轮播图(图片、视屏)

文章目录

    • 1、WPF技术实现图片轮播
    • 2、WPF技术实现视屏轮播
    • 3、WPF技术实现图片视屏组合轮播

在这里插入图片描述

1、WPF技术实现图片轮播

  以下是一个使用WPF技术实现图片轮播的简单案例代码示例。在这个示例中,我们将使用Image控件来显示图片,并使用DispatcherTimer来实现图片切换的定时效果。

  首先,在XAML文件中创建一个窗口,并添加一个Image控件用于显示图片:

<Window x:Class="ImageSlider.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Image Slider" Height="400" Width="600">
    <Grid>
        <Image Name="imageControl" Stretch="UniformToFill"/>
    </Grid>
</Window>

  然后,在C#代码中,实现图片轮播逻辑:

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Threading;

namespace ImageSlider
{
    public partial class MainWindow : Window
    {
        private List<string> imagePaths = new List<string>
        {
            "image1.jpg",
            "image2.jpg",
            "image3.jpg",
            // 添加更多图片路径
        };

        private int currentIndex = 0;
        private DispatcherTimer timer = new DispatcherTimer();

        public MainWindow()
        {
            InitializeComponent();
            timer.Interval = TimeSpan.FromSeconds(5); // 设置图片切换间隔
            timer.Tick += Timer_Tick;
            LoadImage(currentIndex); // 初始加载第一张图片
            timer.Start(); // 启动定时器
        }

        private void Timer_Tick(object sender, EventArgs e)
        {
            currentIndex++;
            if (currentIndex >= imagePaths.Count)
            {
                currentIndex = 0;
            }
            LoadImage(currentIndex);
        }

        private void LoadImage(int index)
        {
            if (index >= 0 && index < imagePaths.Count)
            {
                string imagePath = imagePaths[index];
                BitmapImage bitmapImage = new BitmapImage(new Uri(imagePath, UriKind.Relative));
                imageControl.Source = bitmapImage;
            }
        }
    }
}

  在上述代码中,我们首先定义了一个包含图片路径的列表 imagePaths,然后使用DispatcherTimer来定时切换图片。在窗口初始化时,我们加载第一张图片并启动定时器,定时器触发时会切换到下一张图片。

  请确保将示例代码中的图片路径替换为你自己的图片路径,并根据需要调整定时器的间隔。

2、WPF技术实现视屏轮播

  要在WPF应用程序中实现视频轮播,你可以使用MediaElement控件来播放视频,并使用DispatcherTimer来控制视频的切换。以下是一个简单的示例代码,演示如何实现视频轮播:

  首先,在XAML文件中创建一个窗口,并添加一个MediaElement控件用于播放视频:

<Window x:Class="VideoSlider.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Video Slider" Height="400" Width="600">
    <Grid>
        <MediaElement Name="mediaElement" Stretch="Fill" LoadedBehavior="Play" UnloadedBehavior="Stop" />
    </Grid>
</Window>

  然后,在C#代码中,实现视频轮播逻辑:

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Threading;
using System.Windows.Media;

namespace VideoSlider
{
    public partial class MainWindow : Window
    {
        private List<string> videoPaths = new List<string>
        {
            "video1.mp4",
            "video2.mp4",
            "video3.mp4",
            // 添加更多视频路径
        };

        private int currentIndex = 0;
        private DispatcherTimer timer = new DispatcherTimer();

        public MainWindow()
        {
            InitializeComponent();
            timer.Interval = TimeSpan.FromSeconds(10); // 设置视频切换间隔
            timer.Tick += Timer_Tick;
            LoadVideo(currentIndex); // 初始加载第一个视频
            timer.Start(); // 启动定时器
        }

        private void Timer_Tick(object sender, EventArgs e)
        {
            currentIndex++;
            if (currentIndex >= videoPaths.Count)
            {
                currentIndex = 0;
            }
            LoadVideo(currentIndex);
        }

        private void LoadVideo(int index)
        {
            if (index >= 0 && index < videoPaths.Count)
            {
                string videoPath = videoPaths[index];
                Uri videoUri = new Uri(videoPath, UriKind.Relative);
                mediaElement.Source = videoUri;
                mediaElement.Play();
            }
        }
    }
}

  在上述代码中,我们首先定义了一个包含视频文件路径的列表 videoPaths,然后使用DispatcherTimer来定时切换视频。在窗口初始化时,我们加载第一个视频并启动定时器,定时器触发时会切换到下一个视频。

  请确保将示例代码中的视频文件路径替换为你自己的视频文件路径,并根据需要调整定时器的间隔。

3、WPF技术实现图片视屏组合轮播

  要在WPF应用程序中实现图片和视频的轮播混合效果,可以借助MediaElement控件播放视频,同时使用Image控件来显示图片。以下是一个示例代码,演示如何实现图片和视频的轮播混合效果:

  首先,在XAML文件中创建一个窗口,包含一个MediaElement用于播放视频和一个Image用于显示图片:

<Window x:Class="MediaSlider.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Media Slider" Height="400" Width="600">
    <Grid>
        <MediaElement Name="mediaElement" Stretch="Fill" LoadedBehavior="Play" UnloadedBehavior="Stop" />
        <Image Name="imageControl" Stretch="UniformToFill"/>
    </Grid>
</Window>

  然后,在C#代码中,实现图片和视频的轮播逻辑:

using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media.Imaging;
using System.Windows.Threading;

namespace MediaSlider
{
    public partial class MainWindow : Window
    {
        private List<string> mediaPaths = new List<string>
        {
            "video1.mp4",
            "image1.jpg",
            "video2.mp4",
            "image2.jpg",
            // 添加更多视频和图片路径
        };

        private int currentIndex = 0;
        private DispatcherTimer timer = new DispatcherTimer();

        public MainWindow()
        {
            InitializeComponent();
            timer.Interval = TimeSpan.FromSeconds(10); // 设置切换间隔
            timer.Tick += Timer_Tick;
            LoadMedia(currentIndex); // 初始加载第一个媒体
            timer.Start(); // 启动定时器
        }

        private void Timer_Tick(object sender, EventArgs e)
        {
            currentIndex++;
            if (currentIndex >= mediaPaths.Count)
            {
                currentIndex = 0;
            }
            LoadMedia(currentIndex);
        }

        private void LoadMedia(int index)
        {
            if (index >= 0 && index < mediaPaths.Count)
            {
                string mediaPath = mediaPaths[index];
                if (mediaPath.EndsWith(".mp4", StringComparison.OrdinalIgnoreCase))
                {
                    // 如果是视频文件
                    Uri videoUri = new Uri(mediaPath, UriKind.Relative);
                    mediaElement.Source = videoUri;
                    mediaElement.Play();
                    imageControl.Visibility = Visibility.Collapsed; // 隐藏图片
                    mediaElement.Visibility = Visibility.Visible; // 显示视频
                }
                else if (mediaPath.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase))
                {
                    // 如果是图片文件
                    BitmapImage bitmapImage = new BitmapImage(new Uri(mediaPath, UriKind.Relative));
                    imageControl.Source = bitmapImage;
                    imageControl.Visibility = Visibility.Visible; // 显示图片
                    mediaElement.Visibility = Visibility.Collapsed; // 隐藏视频
                }
            }
        }
    }
}

  在上述代码中,我们定义了一个包含视频文件和图片文件路径的列表 mediaPaths,并使用DispatcherTimer来定时切换媒体。在窗口初始化时,我们加载第一个媒体(可以是视频或图片),并启动定时器,定时器触发时会切换到下一个媒体。

  根据文件的扩展名来判断是视频还是图片,并相应地设置MediaElement和Image的可见性。

  请确保将示例代码中的媒体文件路径替换为你自己的文件路径,并根据需要调整定时器的间隔。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1031588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【从0学习Solidity】 5. 变量数据存储和作用域 storage/memory/calldata

【从0学习Solidity】 5. 变量数据存储和作用域 storage/memory/calldata 博主简介&#xff1a;不写代码没饭吃&#xff0c;一名全栈领域的创作者&#xff0c;专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构&#xff0c;分享一些项目实战经验以及前沿技术的见解…

计算机遇到MSVCP140.dll丢失问题?全面分析解决方案

随着科技的飞速发展&#xff0c;计算机已经成为人们日常生活和工作中不可或缺的工具。在计算机的使用过程中&#xff0c;有时会出现丢失 MSVCP140.dll 的问题&#xff0c;给用户带来了诸多不便。那么&#xff0c;什么是 MSVCP140.dll&#xff1f;为什么会出现丢失 MSVCP140.dll…

建议收藏《Verilog代码规范笔记_华为》(附下载)

华为verilog编程规范是坊间流传出来华为内部的资料&#xff0c;其贴合实际工作需要&#xff0c;是非常宝贵的资料&#xff0c;希望大家善存。至于其介绍&#xff0c;在此不再赘述&#xff0c;大家可看下图详细了解&#xff0c;感兴趣的可私信领取《Verilog代码规范笔记_华为》。…

批量调整视频饱和度和色度,提升你的视频剪辑效率!

作为一名视频剪辑师&#xff0c;你是否经常为如何高效地调整多个视频的饱和度和色度而烦恼&#xff1f;现在&#xff0c;我们为你提供了一种简单、快速、准确的方法&#xff0c;帮助你轻松解决这个问题&#xff01; 首先我们要进入好简单批量智剪&#xff0c;并在左侧的板块栏…

MySQL详细案例 1:MySQL主从复制与读写分离

文章目录 1. MySQL主从复制1.1 使用场景1.2 MySQL的复制类型1.3 主从复制的工作过程1.4 实现MySQL主从复制1.4.1 前置准备1.4.2 主服务器mysql配置1.4.3 从服务器1 mysql配置1.4.3 从服务器2 mysql配置1.4.4 测试 1.5 主从复制的3种同步模式1.5.1 异步复制&#xff08;Asynchro…

如何自动获取短信验证码?

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 这篇文章通过解决实际项目开发中遇到的如何自动获取短信验证码的问题&#xff0c;进一步讲述在Java中如何使用正则。 Java中如何使用正则 Java中正则相关类位于java.util.r…

分享从零开始学习网络设备配置--任务3.5 使用静态路由实现网络连通

任务描述 某公司规模较小&#xff0c;该公司的网络管理员经过考虑&#xff0c;决定在公司的路由器、交换机与运营商路由器之间使用静态路由&#xff0c;实现网络的互连。 静态路由一般适用于比较简单的网络环境。在这样的环境中&#xff0c;网络管理员应非常清楚地了解网络…

[C++随笔录] vector模拟实现

vector模拟实现 基本结构天选之子构造拷贝构造析构operator 空间reserveresizesize && capacity 增insertpush_back 删erasepop_back 查 && 改swapoperator[] 源码 基本结构 // 可以是不同类型, 用类模板 template <class T> class vector { public:// 源…

Spring学习笔记1 启示录

写段代码,引出Spring的好处 创建个空工程,然后在工程里建模块 可能是IEAD版本问题,每次建新的空工程,都需要退出重进 设置下maven和Encoding 新建模块 持久层接口 持久层实现类 业务层接口 业务层实现类 控制层(表现层) 建个测试类测试 分析这个程序存在的问题 假设现在新需…

git和github的入门操作

之前因为工作中用的都是SVN版本控制工具&#xff0c;没接触过git和github&#xff0c;现在开始深入自学Django框架技术后&#xff0c;看到官网推荐使用git&#xff0c;然后这两天网上查阅了很多文章教程&#xff0c;学到入门操作需要学习的点&#xff0c;太多的知识点要后面慢慢…

PostgreSQL 数据库实现公网远程连接

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统&#xff08;RDBMS&#xff09;,下…

有没有免费的云渲染平台?哪家云渲染平台收费更合理?

&#xfeff;如今&#xff0c;越来越多的设计师开始使用云渲染平台来加快渲染速度并降低成本。许多人都想知道是否有免费的云渲染平台&#xff0c;或者说哪家云渲染平台收费更合理。在本文中&#xff0c;小编将详细介绍这些问题&#xff0c;帮助您更好地了解和选择适合您需求的…

同一份数据全域共享,HashData UnionStore实时性背后的故事

时至今日&#xff0c;数据已经被越来越多的企业视为发展的战略资源&#xff0c;而云数仓则是数据发挥重要价值的关键媒介。云数仓的出现&#xff0c;不仅改变了传统数据仓库的服务模式&#xff0c;更给用户带来了应对海量、新型数据的存储和处理能力&#xff0c;为满足业务现代…

MES管理系统在生产中的应用及智能工厂的构建思路

在当今制造业中&#xff0c;随着信息化技术和智能化的不断发展&#xff0c;MES生产管理系统已成为工厂生产的核心组成部分。MES管理系统不仅能够提高生产效率&#xff0c;还可以优化生产流程&#xff0c;提升产品质量。本文将详细介绍MES管理系统在工厂生产中的应用以及构建智能…

PowerShell切换多个java版本

安装jdk1.8 和 jdk17 下载jdk 前往 oracle官网下载 配置环境变量 变量名 CLASSPATH变量值 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar效果图&#xff1a; 变量名&#xff08;jdk1.8同理&#xff09; JAVA_HOME17变量值 C:\Program Files\Java\jdk-17效果图&#xff1…

更快,更稳,更智能,科聪穿梭车(RGV)快速构建方案!

随着自动化物流发展&#xff0c;密集存储得到越来越广泛地应用&#xff0c;已经是现代物流的重要组成部分之一。作为密集存储系统中关键设备之一&#xff0c;穿梭车&#xff08;RGV&#xff09;越来越受到大家的重视。 穿梭车&#xff08;RGV&#xff09;是一种智能机器人&…

GB28181协议-SDP详解

SDP协议 SDP全称是Session Description Protocol&#xff0c;翻译过来就是描述会话的协议。主要用于两个会话实体之间的媒体协商。 SDP描述由许多文本行组成&#xff0c;文本行的格式为<类型><值>&#xff0c;表示为keyvalue; SIP负责建立和释放会话&#xff0c…

基于vue3 + ant-design 自定义SVG图标iconfont的解决方案;ant-design加载本地iconfont.js不显示图标问题

基于vue3 ant-design 自定义SVG图标iconfont的解决方案&#xff1b; ant-design加载本地iconfont.js不显示图标问题 一、准备工作 1、首先去阿里巴巴矢量图标库自定义添加自己的图标&#xff1b;网站地址https://www.iconfont.cn/ 整个步骤是&#xff1a;选择图标–添加到项…

人大女王大学金融硕士——人生的每一刻,都是在为自己的明天铺垫

随着社会经济的迅速发展&#xff0c;经济全球化不断扩大。许多学子想要体验到更加多元化的教育&#xff0c;却又不想出国&#xff0c;那么中外合作办学硕士便是最好的方式。作为金融人士的你&#xff0c;不妨看看中国人民大学与加拿大女王大学合办的金融硕士项目&#xff0c;或…

【Verilog教程】3.2 Verilog 时延

关键词&#xff1a;时延&#xff0c; 惯性时延 连续赋值延时语句中的延时&#xff0c;用于控制任意操作数发生变化到语句左端赋予新值之间的时间延时。 时延一般是不可综合的。 寄存器的时延也是可以控制的&#xff0c;这部分在时序控制里加以说明。 连续赋值时延一般可分为…