WPF 中嵌入Windows Media Player

简介:

  上一篇通过MediaElement 控件在WPF 4 中制作了简单的媒体播放器。本篇将直接把Windows Media Player 嵌入WPF 中实现同样的效果。起初创建该实例是基于.Net Framework 4.0 完成后编译顺利通过,但F5 时出现了问题。提示无法加载Interop.WMPLib,调试了许久也没搞出个明堂。最后转用.Net 3.5 问题解决,难道是4.0 不支持?感兴趣的朋友可下载代码进一步研究。

创建项目

1. 新建一个基于.Net Framework 3.5 的WPF 应用程序项目:WPFWMP。

2. 在工程中新建Windows Forms Control Library 项目:WMPControlLibrary。

ControlLibrary

创建WMP 控件

     下面要在WMPControlLibrary 中创建Windows Media Player 控件,在项目中加入Windows Media Player COM。

 AddMediaPlayerReference

     在左侧工具栏中若没有Windows Media Player 控件的话,可以右键General 选择Choose Items,在COM 组件列表中勾选Windows Media Player 选项。

AddItem

AddCOM

将Windows Media Player 控件拖入设计窗口,并将Dock 设置为Fill 填充控件。

Dock

控件效果图:

 AddControl

F6 编译项目后会生成以下三个DLL 文件,这就是我们稍后将要在WPF 中用到的WMP 控件库。

BuildDLL

嵌入WMP 控件

    回到WPF 项目在前篇文章的基础上,保留其中“Open File” 按键和Button 样式。将上面三个DLL 文件及System.Windows.Forms、WindowsFormsIntegration 加入项目。

AxInterop

FormDLL

     在XAML 中加入AxWMPLib 命名空间,并将上篇MediaElement 替换为AxWindowsMediaPlayer 控件,注意此处是将WinForm 控件嵌入WPF 程序,所以要将AxWindowsMediaPlayer 控件放到<WindowsFormsHost>标签中。

<Window x:Class="WPFWMP.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mediaControl="clr-namespace:AxWMPLib;assembly=AxInterop.WMPLib"
        Title="WPF Media Player" Height="450" Width="520" Background="#FF554D4D">
    <Window.Resources>
        <Style x:Key="btnStyle" TargetType="Button">
          … …        
</
Style> </Window.Resources> <StackPanel HorizontalAlignment="Center" Margin="10"> <Border BorderThickness="3" Background="Black"> … …
<WindowsFormsHost Height="340" Width="450"> <mediaControl:AxWindowsMediaPlayer x:Name="wpfMediaPlayer"/> </WindowsFormsHost> </Border> <Button Content="Open File" Click="openFile_Click" Margin="10" Width="80" Style="{StaticResource btnStyle}"/> </StackPanel> </Window>

通过Windows API Code Pack 为“Open File” 按键添加点击事件,默认打开Sample Video 文件夹,选择视频文件后自动播放。

private void openFile_Click(object sender, RoutedEventArgs e)
{
    ShellContainer selectedFolder = null;
    selectedFolder = KnownFolders.SampleVideos as ShellContainer;
    CommonOpenFileDialog cfd = new CommonOpenFileDialog();
    cfd.InitialDirectoryShellContainer = selectedFolder;
    cfd.EnsureReadOnly = true;
    cfd.Filters.Add(new CommonFileDialogFilter("WMV Files", "*.wmv"));
    cfd.Filters.Add(new CommonFileDialogFilter("AVI Files", "*.avi"));
    cfd.Filters.Add(new CommonFileDialogFilter("MP3 Files", "*.mp3"));

    if (cfd.ShowDialog() == CommonFileDialogResult.OK)
    {
        wpfMediaPlayer.URL = cfd.FileName;
    }
}

Demo

源代码下载





本文转自Gnie博客园博客,原文链接:http://www.cnblogs.com/gnielee/archive/2010/05/07/wpf-embed-wmp.html,如需转载请自行联系原作者
相关文章
|
4月前
|
人工智能 机器人 C#
Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)
一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。
|
Web App开发 监控 前端开发
C# WPF 嵌入网页版WebGL油田三维可视化监控
C# WPF 嵌入网页版WebGL油田三维可视化监控
C# WPF 嵌入网页版WebGL油田三维可视化监控
|
C# Windows
Windows DPI Awareness for WPF
原文 Windows DPI Awareness for WPF 对于 WPF 程序,要控制程序的 DPI 感知程度,可在 App.manifest 中添加如下代码。 本文知识已经陈旧,你可以阅读这两篇文章来了解更新的 Windows DPI 应用知识: Windows 下的高 DPI 应...
1390 0
|
Windows
windows系统下运行QT视频播放器示例程序(Media Player Example )
windows系统下运行QT视频播放器示例程序(Media Player Example )
298 0
windows系统下运行QT视频播放器示例程序(Media Player Example )
|
虚拟化 Windows
windows 10 使用 VMWare workstation player 启动 windows XP 虚拟机出错的问题
windows 10 使用 VMWare workstation player 启动 windows XP 虚拟机出错的问题
215 0
windows 10 使用 VMWare workstation player 启动 windows XP 虚拟机出错的问题
|
Windows
Windows Media Center携手新浪、搜狐推出互联网视频
Windows Media Center携手新浪、搜狐推出互联网视频
490 0
|
C# Windows
WPF程序在Windows 7下应用Windows 8主题
原文:WPF程序在Windows 7下应用Windows 8主题 这篇博客介绍如何在Windows 7下应用Windows 8的主题。 首先我们先看一个很常见的场景,同样的WPF程序(样式未重写)在不同的操作系统上展示会有些不同。
1012 0
|
C# Windows 开发工具
WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit)
原文 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) Windows Community Toolkit 再次更新到 5.0。
1909 0
|
C#
WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口)
原文 WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口) WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验。如果希望做不同线程的 UI,大家也会想到使用另一个窗口来实现,让每个窗口拥有自己的 UI 线程。
2904 0
|
C# Windows
支持 Windows 10 最新 PerMonitorV2 特性的 WPF 多屏高 DPI 应用开发
原文:支持 Windows 10 最新 PerMonitorV2 特性的 WPF 多屏高 DPI 应用开发 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
1340 0