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);
}
关键点说明
-
音频文件路径:
- 若文件属性为
Resource
,使用:"pack://application:,,,/YourAssemblyName;component/Resources/background_music.mp3"
- 若为
Content
,使用:"Resources/background_music.mp3"
(相对输出目录路径)
- 若文件属性为
-
媒体播放器控制:
MediaPlayer.Play()
:开始播放MediaPlayer.Stop()
:停止并重置位置MediaPlayer.Close()
:释放资源- 订阅
MediaEnded
事件实现循环播放
-
资源释放 :
务必在窗口关闭时停止并释放
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启动界面实现背景音乐的播放和自动管理。