当前位置: 首页 > news >正文

WPF为启动界面(Splash Screen)添加背景音乐

1. 添加音频文件到项目
  • 将音频文件(如.mp3/.wav)放入项目文件夹(如Resources
  • 在解决方案资源管理器中右键文件 → 属性:
    • 生成操作:选择Resource(嵌入资源)或Content(内容文件)
    • 复制到输出目录:选择始终复制
2. 创建启动界面窗口

新建一个WPF窗口作为启动界面(如SplashScreenWindow.xaml):

<Window x:Class="YourNamespace.SplashScreenWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"WindowStyle="None" AllowsTransparency="True" Background="Transparent" WindowStartupLocation="CenterScreen"><Grid><!-- 添加你的启动界面内容(如图片、进度条等) --><Image Source="splash_image.png"/></Grid>
</Window>
3. 在启动界面后台代码中播放音乐

修改SplashScreenWindow.xaml.cs

using System.Windows;
using System.Windows.Media;public partial class SplashScreenWindow : Window
{private MediaPlayer _mediaPlayer;public SplashScreenWindow(){InitializeComponent();Loaded += OnLoaded;}private void OnLoaded(object sender, RoutedEventArgs e){// 初始化媒体播放器_mediaPlayer = new MediaPlayer();_mediaPlayer.MediaEnded += (s, args) => {_mediaPlayer.Position = TimeSpan.Zero; // 循环播放_mediaPlayer.Play();};try{// 加载音频资源(根据文件属性选择路径格式)Uri audioUri = new Uri("pack://application:,,,/Resources/background_music.mp3");_mediaPlayer.Open(audioUri);_mediaPlayer.Play();}catch (Exception ex){MessageBox.Show($"播放音乐失败: {ex.Message}");}}// 窗口关闭时停止音乐protected override void OnClosed(EventArgs e){_mediaPlayer?.Stop();_mediaPlayer?.Close();base.OnClosed(e);}
}
4. 修改App.xaml.cs启动逻辑

App.xaml.cs中显示启动界面,并在主窗口显示后关闭它:

protected override void OnStartup(StartupEventArgs e)
{// 创建并显示启动窗口var splashScreen = new SplashScreenWindow();splashScreen.Show();// 模拟初始化耗时操作System.Threading.Thread.Sleep(3000); // 实际中替换为真实初始化代码// 创建主窗口var mainWindow = new MainWindow();mainWindow.Show();// 关闭启动窗口splashScreen.Close();base.OnStartup(e);
}

关键点说明

  1. 音频文件路径

    • 若文件属性为Resource,使用:"pack://application:,,,/YourAssemblyName;component/Resources/background_music.mp3"
    • 若为Content,使用:"Resources/background_music.mp3"(相对输出目录路径)
  2. 媒体播放器控制

    • MediaPlayer.Play():开始播放
    • MediaPlayer.Stop():停止并重置位置
    • MediaPlayer.Close():释放资源
    • 订阅MediaEnded事件实现循环播放
  3. 资源释放
    务必在窗口关闭时停止并释放MediaPlayer,避免资源泄漏。

替代方案:使用App.xaml全局播放

如果需要在主窗口继续播放音乐,可将播放器移至App类:

// App.xaml.cs
public partial class App : Application
{private MediaPlayer _mediaPlayer;protected override void OnStartup(StartupEventArgs e){_mediaPlayer = new MediaPlayer();_mediaPlayer.Open(new Uri("pack://application:,,,/Resources/background_music.mp3"));_mediaPlayer.Play();// 显示启动窗口和主窗口(同上)base.OnStartup(e);}// 应用退出时停止音乐protected override void OnExit(ExitEventArgs e){_mediaPlayer?.Stop();_mediaPlayer?.Close();base.OnExit(e);}
}

常见问题处理

  • 音乐无法播放:检查文件路径、属性设置和文件格式(WPF支持.mp3, .wav等)。
  • 音量控制:通过_mediaPlayer.Volume = 0.5;调整音量(0.0~1.0)。
  • 异步加载:如果初始化耗时,使用async/await避免界面卡顿。

通过以上步骤,即可在WPF启动界面实现背景音乐的播放和自动管理。

http://www.lryc.cn/news/593000.html

相关文章:

  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - snowNLP库实现中文情感分析
  • 标准文件和系统文件I/O
  • 车载刷写框架 --- 关于私有节点刷写失败未报引起的反思
  • 《命令行参数与环境变量:从使用到原理的全方位解析》
  • 移除debian升级后没用的垃圾
  • laravel RedisException: Connection refused优雅草PMS项目管理系统报错解决-以及Redis 详细指南-优雅草卓伊凡
  • 2025第15届上海国际生物发酵展:聚焦合成生物与绿色制造,共启生物经济新时代
  • Rust Web 全栈开发(十):编写服务器端 Web 应用
  • 医疗AI与融合数据库的整合:挑战、架构与未来展望(下)
  • 【C# in .NET】19. 探秘抽象类:具体实现与抽象契约的桥梁
  • xss的利用
  • CS231n-2017 Lecture2图像分类笔记
  • Kafka深度解析:架构、原理与应用实践
  • [论文阅读] 人工智能 + 软件工程 | 强化学习在软件工程中的全景扫描:从应用到未来
  • windows docker-02-docker 最常用的命令汇总
  • GEO营销:AI时代的搜索优化新赛道——从DeepSeek爆火看生成式引擎优化的崛起
  • Elasticsearch 重命名索引
  • LVS 集群技术实践:NAT 与 DR 模式的配置与对比
  • 牛客-倒置字符串
  • Go语言中的类型转换与类型推断解析
  • 用 Numpy 手动实现矩阵卷积运算
  • 我们使用 Blender 和 Godot 的工作流程
  • 从车险理赔到快递签收:打通区块链与现实世界的“最后一公里”——解密预言机(Oracle)
  • 【Linux服务器】-mysql数据库数据目录迁移
  • Linux系统环境下 Node.js 20 安装实践:glibc 2.17 兼容方案与工具链优化
  • 正向代理与反向代理理解
  • 零基础学后端-PHP语言(第一期-PHP环境配置)
  • Libevent(3)之使用教程(2)创建事件
  • Kafka——Java生产者是如何管理TCP连接的?
  • Python day18