WPF MediaElement
控件用于播放音频和视频文件,可以播放多种格式如 MP3、WMA、WMV、AVI、MP4 等。它支持丰富的媒体控制功能,包括播放、暂停、停止、跳转等,适用于需要在应用程序中播放媒体文件的场景。
下面是详细的 MediaElement
使用教程:
1. 创建一个基本的 MediaElement 控件
XAML 定义:
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MediaElement Example" Height="350" Width="525">
<Grid>
<MediaElement Name="mediaPlayer"
Source="media/sample.mp4"
Width="300" Height="200"
LoadedBehavior="Manual"
UnloadedBehavior="Stop"
Stretch="Uniform"
MediaEnded="mediaPlayer_MediaEnded" />
<Button Content="Play" Width="100" Height="30"
HorizontalAlignment="Center" VerticalAlignment="Bottom"
Click="PlayButton_Click"/>
</Grid>
</Window>
C# 代码:
private void PlayButton_Click(object sender, RoutedEventArgs e)
{
mediaPlayer.Play(); // 播放媒体
}
private void mediaPlayer_MediaEnded(object sender, RoutedEventArgs e)
{
mediaPlayer.Stop(); // 媒体播放完后停止
}
2. MediaElement 控件的关键属性
Source
:媒体文件的路径,可以是相对路径、本地路径或网络 URL。- 示例:
Source="media/sample.mp4"
或Source="http://example.com/video.mp4"
- 示例:
LoadedBehavior
:控制媒体加载后的行为。常见值:Play
:自动开始播放。Pause
:加载后暂停。Stop
:加载后停止。Manual
:通过代码控制播放。
UnloadedBehavior
:控件被移除时的行为。常见值同LoadedBehavior
。Stretch
:控制视频在控件中的显示方式,类似于Image
控件的Stretch
属性:None
:不拉伸,保持原始大小。Fill
:拉伸填充控件,可能会导致视频变形。Uniform
:按比例拉伸适应控件。UniformToFill
:按比例拉伸,裁剪超出部分。
3. 播放控制
可以通过代码控制 MediaElement
的播放行为:
-
播放:
mediaPlayer.Play();
-
暂停:
mediaPlayer.Pause();
-
停止:
mediaPlayer.Stop();
-
跳转到指定时间:
mediaPlayer.Position = TimeSpan.FromSeconds(30); // 跳转到30秒处
4. 支持的媒体格式
WPF MediaElement
控件支持以下常见的媒体格式:
- 音频格式:MP3、WMA、WAV
- 视频格式:WMV、MP4、AVI
使用注意:
MediaElement
的实际支持格式依赖于 Windows Media Player 解码器。如果需要支持更多的格式,可能需要安装第三方解码器。
5. 响应媒体事件
MediaElement
提供了多种事件,以便你可以在媒体播放的不同阶段执行特定操作。
-
MediaOpened
:媒体开始播放时触发。private void mediaPlayer_MediaOpened(object sender, RoutedEventArgs e) { MessageBox.Show("Media opened!"); }
-
MediaEnded
:媒体播放完毕时触发。private void mediaPlayer_MediaEnded(object sender, RoutedEventArgs e) { mediaPlayer.Stop(); // 播放结束后停止 }
-
MediaFailed
:媒体加载或播放失败时触发。private void mediaPlayer_MediaFailed(object sender, ExceptionRoutedEventArgs e) { MessageBox.Show("Media failed to load!"); }
6. 控制音量和静音
-
设置音量(范围:0.0 到 1.0):
mediaPlayer.Volume = 0.5; // 设置音量为 50%
-
静音:
mediaPlayer.IsMuted = true; // 设置为静音
7. 获取和设置播放状态
你可以通过 MediaElement
的一些属性来获取当前的播放状态:
-
当前播放时间:
TimeSpan currentTime = mediaPlayer.Position;
-
获取媒体的总时长:
TimeSpan duration = mediaPlayer.NaturalDuration.TimeSpan;
-
判断是否在播放:
bool isPlaying = mediaPlayer.IsPlaying(); // 自定义扩展方法
8. 处理全屏视频
可以通过将 MediaElement
的 Width
和 Height
设置为 Window
的大小来实现全屏播放:
全屏播放示例:
private void ToggleFullScreen()
{
if (this.WindowState == WindowState.Normal)
{
this.WindowState = WindowState.Maximized;
mediaPlayer.Width = this.ActualWidth;
mediaPlayer.Height = this.ActualHeight;
}
else
{
this.WindowState = WindowState.Normal;
mediaPlayer.Width = 300;
mediaPlayer.Height = 200;
}
}
9. 异步加载媒体
你可以使用 MediaElement
的异步功能,在后台加载媒体资源,这样可以避免因为加载大文件而阻塞 UI。
mediaPlayer.Source = new Uri("media/sample.mp4", UriKind.RelativeOrAbsolute);
通过事件处理 MediaOpened
或 MediaFailed
确认媒体是否成功加载。
10. 从资源文件加载媒体
若要从项目的资源文件中加载媒体,可以将媒体文件设置为资源,然后在 XAML 或代码中引用资源文件。
XAML 引用资源文件:
<MediaElement Source="pack://application:,,,/media/sample.mp4"/>
C# 代码引用资源文件:
mediaPlayer.Source = new Uri("pack://application:,,,/media/sample.mp4");
总结
MediaElement
是 WPF 中强大的多媒体控件,允许开发者轻松地将音频和视频集成到应用程序中。通过合理使用其属性和事件,可以实现丰富的媒体播放控制。