您的位置:首页 > 其它

WPF 中嵌入Windows Media Player

2010-05-07 12:01 381 查看
     上一篇通过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。



创建WMP 控件

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


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





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



控件效果图:
 


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



嵌入WMP 控件

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





     在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;      }  }



源代码下载

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: