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

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

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

xml 复制代码
<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

csharp 复制代码
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中显示启动界面,并在主窗口显示后关闭它:

csharp 复制代码
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类:

csharp 复制代码
// 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启动界面实现背景音乐的播放和自动管理。

相关推荐
2601_962174171 天前
Redis 简介
数据库·redis·wpf
SamChan902 天前
Python+PyMuPDF提取PDF表格并翻译:表格结构检测与双语重建实战
windows·python·ai·pdf·wpf
SamChan902 天前
Python+OpenCV检测PDF翻译后排版偏移:像素级格式一致性验证
python·opencv·ai·pdf·wpf
FuckPatience3 天前
WPF 拿到控件的最初样式,修改获得焦点样式
wpf
主宰者3 天前
【WPF】MainWindow前添加加载窗口,发现加载过程中有白色无内容窗口闪烁一下的解决方案
wpf
Vae_Mars3 天前
WPF中的ControlTemplate(控件模板)
wpf
SamChan903 天前
Python+ReportLab自动生成PDF翻译质量审计报告:从数据到可视化的完整方案
开发语言·python·ai·pdf·wpf
circuitsosk4 天前
多智能体协同在能源数据分析中的实践:分配-执行-校验闭环架构设计
python·数据分析·wpf·能源·并行计算·多智能体系统·agent协作
weixin199701080164 天前
《大促护航:电商API限流与降级,双11峰值500万调用的架构复盘》(附Python源码)
python·架构·wpf
hh9505 天前
gent Plan x DeepSeek Harness:多 Agent 协作场景下的中央编排实践
人工智能·wpf·adg·火山引擎·agent plan·adg成都社区