演练:在 WPF 中承载 ActiveX 控件

要改进与浏览器的交互,可以在基于 WPF 的应用程序中使用 Microsoft ActiveX 控件。 本演练演示如何将 Microsoft Windows Media Player 承载为 WPF 页面上的控件。

本演练涉及以下任务:

  • 创建项目。

  • 创建 ActiveX 控件。

  • 在 WPF 页面上承载 ActiveX 控件。

完成本演练后,你将了解如何在基于 WPF 的应用程序中使用 Microsoft ActiveX 控件。

先决条件

你需要满足以下条件才能完成本演练:

  • Microsoft Windows Media Player 安装在安装了 Visual Studio 的计算机上。

  • Visual Studio 2010。

创建项目

创建并设置项目

  1. 创建名为 HostingAxInWpf 的 WPF 应用程序项目。

  2. 将 Windows 窗体控件库项目添加到解决方案,并将项目命名为 WmpAxLib

  3. 在 WmpAxLib 项目中,添加对名为 wmp.dll 的 Windows Media Player 程序集的引用。

  4. 打开“工具箱”

  5. 右键单击工具箱,然后单击“选择项”

  6. 单击“COM 组件”选项卡,选择“Windows Media Player”控件,然后单击“确定”

    Windows Media Player 控件将添加到“工具箱”中

  7. 在解决方案资源管理器中,右键单击“UserControl1”文件,然后单击“重命名”

  8. 根据语言将名称更改为 WmpAxControl.vbWmpAxControl.cs

  9. 如果系统提示重命名所有引用,请单击“是”

创建 ActiveX 控件

将控件添加到设计图面时,Visual Studio 会自动为 Microsoft ActiveX 控件生成 AxHost 包装类。 以下过程创建名为 AxInterop.WMPLib.dll 的托管程序集。

创建 ActiveX 控件

  1. 在 Windows 窗体设计器中打开 WmpAxControl.vb 或 WmpAxControl.cs。

  2. 在“工具箱”中,将 Windows Media Player 控件添加到设计图面

  3. 在“属性”窗口中,将 Windows Media Player 控件的 Dock 属性的值设置为 Fill

  4. 生成 WmpAxLib 控件库项目。

在 WPF 页面上承载 ActiveX 控件

承载 ActiveX 控件

  1. 在 HostingAxInWpf 项目中,添加对生成的 ActiveX 互操作性程序集的引用。

    此程序集名为 AxInterop.WMPLib.dll,并在你导入 Windows Media Player 控件时添加到 WmpAxLib 项目的 Debug 文件夹中。

  2. 添加对 WindowsFormsIntegration 程序集的引用,该程序集名为 WindowsFormsIntegration.dll。

  3. 添加对名为 System.Windows.Forms.dll 的 Windows 窗体程序集的引用。

  4. 在 WPF 设计器中打开 MainWindow.xaml。

  5. Grid 元素命名为 grid1

    <Grid Name="grid1">
        
    </Grid>
    
  6. 在设计视图或 XAML 视图中,选择 Window 元素。

  7. 在“属性”窗口中,单击“事件”选项卡

  8. 双击 Loaded 事件。

  9. 插入以下代码以处理 Loaded 事件。

    此代码创建 WindowsFormsHost 控件的实例并将 AxWindowsMediaPlayer 控件的实例添加为其子项。

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // Create the interop host control.
        System.Windows.Forms.Integration.WindowsFormsHost host =
            new System.Windows.Forms.Integration.WindowsFormsHost();
    
        // Create the ActiveX control.
        WmpAxLib.AxWindowsMediaPlayer axWmp = new WmpAxLib.AxWindowsMediaPlayer();
    
        // Assign the ActiveX control as the host control's child.
        host.Child = axWmp;
    
        // Add the interop host control to the Grid
        // control's collection of child controls.
        this.grid1.Children.Add(host);
    
        // Play a .wav file with the ActiveX control.
        axWmp.URL = @"C:\Windows\Media\tada.wav";
    }
    
    Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
    
        ' Create the interop host control.
        Dim host As New System.Windows.Forms.Integration.WindowsFormsHost()
    
        ' Create the ActiveX control.
        Dim axWmp As New AxWMPLib.AxWindowsMediaPlayer()
    
        ' Assign the ActiveX control as the host control's child.
        host.Child = axWmp
    
        ' Add the interop host control to the Grid
        ' control's collection of child controls.
        Me.grid1.Children.Add(host)
    
        ' Play a .wav file with the ActiveX control.
        axWmp.URL = "C:\Windows\Media\tada.wav"
    
    End Sub
    
  10. 按 F5 生成并运行应用程序。

另请参阅