You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForms集成XAML窗口实现Windows.Media.Playback视频显示问题

在WinForms中解决Windows.Media.Playback仅播放声音无画面的问题

问题分析

你当前的代码使用Windows.Media.Playback.MediaPlayer仅能播放声音,是因为这个类仅负责媒体播放的逻辑处理,没有自带的视频渲染界面。要显示画面,必须将它关联到MediaPlayerElement(XAML控件),再通过WinForms的ElementHost控件将XAML控件嵌入到WinForms窗体中。

解决步骤

1. 安装必要的NuGet包

右键项目 -> 管理NuGet程序包,搜索并安装Microsoft.UI.Xaml,这是在WinForms中使用WinUI XAML控件的基础依赖。

2. 在Form中添加ElementHost控件

打开Form的设计视图,在工具箱的「WPF Interop」分组里找到ElementHost控件,拖放到Form上,调整它的大小和位置(比如设置为铺满整个Form或者指定播放区域)。

3. 修改代码,关联MediaPlayer和MediaPlayerElement

更新你的Form代码如下:

using Windows.Media.Core;
using Windows.Media.Playback;
using Microsoft.UI.Xaml.Controls;
using System.Windows.Forms.Integration;

public partial class Form1 : Form
{
    private MediaPlayer _mediaPlayer;
    private MediaPlayerElement _mediaPlayerElement;
    private ElementHost _elementHost;

    public Form1()
    {
        InitializeComponent();
        
        // 初始化ElementHost(如果是设计时拖放的,直接用设计生成的实例即可)
        _elementHost = new ElementHost();
        _elementHost.Dock = DockStyle.Fill;
        this.Controls.Add(_elementHost);

        // 初始化MediaPlayer
        _mediaPlayer = new MediaPlayer();
        _mediaPlayer.MediaFailed += MediaPlayer_MediaFailed;

        // 初始化MediaPlayerElement并关联MediaPlayer
        _mediaPlayerElement = new MediaPlayerElement();
        _mediaPlayerElement.MediaPlayer = _mediaPlayer;
        _mediaPlayerElement.AreTransportControlsEnabled = true; // 可选:显示播放控制条

        // 将MediaPlayerElement设置为ElementHost的子控件
        _elementHost.Child = _mediaPlayerElement;
    }

    private void MediaPlayer_MediaFailed(MediaPlayer sender, MediaPlayerFailedEventArgs args)
    {
        MessageBox.Show(args.ErrorMessage, "播放错误");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        _mediaPlayer.Source = MediaSource.CreateFromUri(new Uri("C:/sfc.mp4"));
        _mediaPlayer.Play();

        // 建议移除测试用的MessageBox,避免阻塞UI线程影响播放渲染
        // MessageBox.Show(_mediaPlayer.CurrentState.ToString(), "播放器状态");
    }
}

4. 注意事项

  • 确保项目目标框架为.NET 6及以上(WinUI 3对框架版本有要求)。
  • 检查视频编码是否被支持(Windows.Media.Playback原生支持H.264等常见MP4编码)。
  • 避免用MessageBox这类阻塞UI线程的操作,否则会干扰媒体播放的初始化和画面渲染。

内容的提问来源于stack exchange,提问作者The amateur programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:05:16