最近用了的加载播放器,来播放视频,没有其他要求,于是就打算用Windows自带的MediaPlayer播放器来实现,不过在wpf下,稍微要麻烦一点。
第一步 创建和设置项目
1、创建一个名为 HostingAxInWpf 的 WPF 应用程序项目。
2、在工程中新建Windows Forms Control Library 项目:WMPControlLibrary。
向解决方案中添加一个 Windows 窗体控件库项目,将该项目命名为 WmpAxLib。
3.在 WmpAxLib 项目中,添加对 Windows Media Player 程序集(名为 wmp.dll)的引用。
4.打开“工具箱”。
5.在“工具箱”中右击,再单击“选择项”。
6.单击“COM 组件”选项卡,选择“Windows Media Player”控件,然后单击“确定”。
Windows Media Player 控件会添加到“工具箱”中。注意:需要在底部右键操作。
第二步 创建 ActiveX 控件
Microsoft Visual Studio 自动在 Microsoft ActiveX 控件添加到设计图面时为该控件生成 AxHost 包装类。 下面的过程会创建一个名为 AxInterop.WMPLib.dll 的托管程序集。
1.在 Windows 窗体设计器中,打开 WmpAxControl.vb 或 WmpAxControl.cs。
2.从“工具箱”中,将 Windows Media Player 控件添加到设计图面。
3.在“属性”窗口中,将 Windows Media Player 控件的 Dock 属性的值设置为 Fill。
4.生成 WmpAxLib 控件库项目。
第三步 承载 ActiveX 控件
1.在 HostingAxInWpf 项目中,添加一个对所生成的 ActiveX 互操作程序集的引用。
此程序集的名称为 AxInterop.WMPLib.dll,当您导入 Windows Media Player 控件时,此程序集会添加到 WmpAxLib 项目的 Debug 文件夹中。
2.添加一个对名为 WindowsFormsIntegration.dll 的 WindowsFormsIntegration 程序集的引用。
3.添加一个对名为 System.Windows.Forms.dll 的 Windows Forms程序集的引用。
4.在 WPF 设计器中打开 MainWindow.xaml。
5.将 Grid 元素命名为 grid1。
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid x:Name="sp1" Margin="0 0 2 0" Grid.Column="0"></Grid>
<Grid x:Name="sp2" Margin="2 0 0 0" Grid.Column="1"></Grid>
</Grid>
6.在设计视图或 XAML 视图中,选择 Window 元素。
7.在“属性”窗口中,单击“事件”选项卡。
8.双击 Loaded 事件。
9.插入下面的代码以处理 Loaded 事件。
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
System.Windows.Forms.Integration.WindowsFormsHost hostBox = new System.Windows.Forms.Integration.WindowsFormsHost();
System.Windows.Forms.Integration.WindowsFormsHost hostDome = new System.Windows.Forms.Integration.WindowsFormsHost();
AxWMPLib.AxWindowsMediaPlayer axWmpBox = new AxWMPLib.AxWindowsMediaPlayer();
AxWMPLib.AxWindowsMediaPlayer axWmpDome = new AxWMPLib.AxWindowsMediaPlayer();
hostBox.Child = axWmpBox;
hostDome.Child = axWmpDome;
this.sp1.Children.Add(hostBox);
this.sp2.Children.Add(hostDome);
axWmpBox.URL = @"C:\1\1.avi";
axWmpDome.URL = @"C:\2\2.avi";
}