演练:使用 XAML 在 Windows Presentation Foundation 中承载 ActiveX 控件
更新:2007 年 11 月
若要改进与 Web 浏览器的交互,可以在基于 WPF 的应用程序中使用 Microsoft ActiveX 控件。本演练演示如何在 WPF 页上使用可扩展应用程序标记语言 (XAML) 将 Microsoft Windows Media Player 作为控件来承载。
本演练涉及以下任务:
创建项目。
创建 ActiveX 控件。
在 Windows Presentation Foundation 页上承载 ActiveX 控件。
有关本演练中所阐释任务的完整代码清单,请参见使用 XAML 在 Windows Presentation Foundation 中承载 ActiveX 控件的示例。
在完成本演练之后,您将了解如何在基于 WPF 的应用程序中使用可扩展应用程序标记语言 (XAML) 来承载 ActiveX 控件。
注意 显示的对话框和菜单命令可能与“帮助”中所述的有所不同,具体取决于当前的设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。
先决条件
您需要以下组件来完成本演练:
在装有 Visual Studio 的计算机上安装 Microsoft Windows Media Player。
Visual Studio 2008.
创建项目
创建和设置项目
创建名为 HostingAxInWpf 的 WPF 应用程序项目。
向该应用程序项目中添加一个 Windows 窗体控件库项目,然后将该窗体控件库项目命名为 WmpAxLib。有关更多信息,请参见“添加新项目”对话框。
在解决方案资源管理器中,添加一个对名为 Wmp.dll 的 Microsoft Windows Media Player 程序集的引用。
打开“工具箱”。
在“工具箱”中右击,再单击“选择项”。
单击“COM 组件”选项卡,选择“Windows Media Player”控件,再单击“确定”接受选定内容。
该 Microsoft Windows Media Player 控件即会添加到“工具箱”中。
在解决方案资源管理器中,右击“UserControl1”文件,再单击“重命名”。
根据您所使用的语言,将名称更改为 WmpAxControl.cs 或 WmpAxControl.vb。
如果系统提示您重命名所有的引用,请单击“是”。
创建 ActiveX 控件
在将 Microsoft ActiveX 控件添加到设计图面上时,Microsoft Visual Studio 会自动为该控件生成一个 AxHost 包装类。下面的过程会创建一个名为 AxInterop.WMPLib.dll 的托管程序集。
创建 ActiveX 控件
在 Windows 窗体设计器中,打开 WmpAxControl。
从“工具箱”中,将 Microsoft Windows Media Player 控件添加设计图面上。
在“属性”窗口中,将 Microsoft Windows Media Player 控件的 Dock 属性值设置为 Fill。
按 F6 生成控件库。
在 Windows Presentation Foundation 页上承载 ActiveX 控件
承载 ActiveX 控件
在 HostingAxInWpf 项目中,添加一个对所生成的 ActiveX 互操作程序集的引用。
此程序集的名称为 AxInterop.WMPLib.dll。当您导入 Microsoft Windows Media Player 控件时,此程序集会添加到 WmpAxLib 项目的 Debug 文件夹中。
添加一个对名为 WindowsFormsIntegration.dll 的 WindowsFormsIntegration 程序集的引用。
添加一个对名为 System.Windows.Forms.dll 的 Windows 窗体程序集的引用。
将 Window1.xaml 中的代码替换为以下代码。
ax 命名空间映射建立一个针对包含 AxWindowsMediaPlayer 控件的 AxInterop.WMPLib 程序集的引用。AxWindowsMediaPlayer 类会创建为 WindowsFormsHost 控件的子控件。
<Window x:Class="HostingAxInWpfWithXaml.Window1" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" xmlns:ax="clr-namespace:AxWMPLib;assembly=AxInterop.WMPLib" Title="HostingAxInWpfWithXaml" Loaded="WindowLoaded" > <Grid Name="grid1"> <WindowsFormsHost Name="wfh"> <ax:AxWindowsMediaPlayer x:Name="axWmp"/> </WindowsFormsHost> </Grid> </Window>
打开 Window1.xaml.cs,并取消对 WindowLoaded 方法定义的注释。
插入下面的代码以处理 Loaded 事件。
private void WindowLoaded(object sender, RoutedEventArgs e) { // Get the AxHost wrapper from the WindowsFormsHost control. AxWMPLib.AxWindowsMediaPlayer axWmp = wfh.Child as AxWMPLib.AxWindowsMediaPlayer; // Play a .wav file with the ActiveX control. axWmp.URL = @"C:\WINDOWS\Media\Windows XP Startup.wav"; }
按 F5 生成并运行该应用程序。
请参见
任务
演练:使用 XAML 在 Windows Presentation Foundation 中承载 Windows 窗体控件
使用 XAML 在 Windows Presentation Foundation 中承载 ActiveX 控件的示例
概念
演练:在 Windows Presentation Foundation 中承载 Windows 窗体复合控件
演练:在 Windows 窗体中承载 Windows Presentation Foundation 控件