在 WPF 应用程序中嵌入 Flash

Embed Flash in WPF application

好的,所以我在 WPF 应用程序中嵌入 Flash 动画时遇到了麻烦。我尝试了很多东西,但只有一个对我有用。

我找到了解决方案,所以我会post在下面。

我找到了解决方案,我按照本教程将 C# 转换为 VB:http://blogs.microsoft.co.il/janiv/2009/09/20/embedding-and-communicating-with-the-macromedia-flash-player-in-wpf/

但最后,我只用了 30 行代码就完成了我最初想要的...

这是来自 WinForm 用户控件的代码,WFFlashPlayer.vb :

Imports System.Windows.Forms

Namespace FlashAxControls
    Partial Public Class WFFlashPlayer
        Inherits UserControl
        Public Sub New()
            InitializeComponent()
            AxShockwaveFlash.Base = "#"
            AxShockwaveFlash.Movie = "#"
        End Sub
    End Class
End Namespace

万一,WFFlashPlayer.Designer.vb :

Namespace FlashAxControls
    Partial Class WFFlashPlayer
        ''' <summary> 
        ''' Required designer variable.
        ''' </summary>
        Private components As System.ComponentModel.IContainer = Nothing

        ''' <summary> 
        ''' Clean up any resources being used.
        ''' </summary>
        ''' <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        Protected Overrides Sub Dispose(disposing As Boolean)
            If disposing AndAlso (components IsNot Nothing) Then
                components.Dispose()
            End If
            MyBase.Dispose(disposing)
        End Sub

#Region "Component Designer generated code"

        ''' <summary> 
        ''' Required method for Designer support - do not modify 
        ''' the contents of this method with the code editor.
        ''' </summary>
        Private Sub InitializeComponent()
            Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(WFFlashPlayer))
            Me.AxShockwaveFlash = New AxShockwaveFlashObjects.AxShockwaveFlash()
            CType(Me.AxShockwaveFlash, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'AxShockwaveFlash
            '
            Me.AxShockwaveFlash.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
            Me.AxShockwaveFlash.Enabled = True
            Me.AxShockwaveFlash.Location = New System.Drawing.Point(0, 0)
            Me.AxShockwaveFlash.Margin = New System.Windows.Forms.Padding(0)
            Me.AxShockwaveFlash.Name = "AxShockwaveFlash"
            Me.AxShockwaveFlash.OcxState = CType(resources.GetObject("AxShockwaveFlash.OcxState"), System.Windows.Forms.AxHost.State)
            Me.AxShockwaveFlash.Size = New System.Drawing.Size(1125, 825)
            Me.AxShockwaveFlash.TabIndex = 0
            '
            'WFFlashPlayer
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(239, Byte), Integer), CType(CType(239, Byte), Integer), CType(CType(242, Byte), Integer))
            Me.Controls.Add(Me.SimpleButton1)
            Me.Controls.Add(Me.AxShockwaveFlash)
            Me.Name = "WFFlashPlayer"
            Me.Size = New System.Drawing.Size(1125, 825)
            CType(Me.AxShockwaveFlash, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)
        End Sub

#End Region

        Private AxShockwaveFlash As AxShockwaveFlashObjects.AxShockwaveFlash
    End Class
End Namespace

这是 WPF 用户控件,FlashPlayer.xaml.vb

Imports System.Windows.Forms.Integration

Namespace FlashAxControls
    Partial Public Class FlashPlayer
        Inherits UserControl

        Private Sub FlashPlayer_Loaded(sender As Object, e As RoutedEventArgs)
            Dim host As New WindowsFormsHost()
            Dim player As New WFFlashPlayer()

            host.Child = player
            FlashPlayerGrid.Children.Add(host)
        End Sub
    End Class
End Namespace

FlashPlayer.xaml :

<UserControl x:Class="FlashAxControls.FlashPlayer"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300" Loaded="FlashPlayer_Loaded">
    <Grid x:Name="FlashPlayerGrid">

    </Grid>
</UserControl>

最后,这是我的 WPF 应用程序 XAML 代码(有点自定义):

<dxr:DXRibbonWindow x:Class="MyProject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
        xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars"
        xmlns:dxr="http://schemas.devexpress.com/winfx/2008/xaml/ribbon"
        xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
        xmlns:controls="clr-namespace:FlashAxControls.FlashAxControls;assembly=FlashAxControls"
        Title="MainWindow" Height="922" Width="1127" Background="#FFEFEFF2" ResizeMode="CanMinimize" BorderEffect="Default" IsAeroMode="False" DisplayShowModeSelector="False" WindowStyle="SingleBorderWindow" ShowInTaskbar="True">
    <Grid>
        <Grid HorizontalAlignment="Left" Grid.Row="1" Grid.ColumnSpan="2">
            <controls:FlashPlayer Height="825" Width="1125"/>
        </Grid>
    </Grid>
</dxr:DXRibbonWindow>

希望对大家有所帮助。