在WPF应用程序中嵌入Flash

时间:2017-06-17 10:37:11

标签: wpf vb.net flash

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

我找到了解决方案,所以我将在下面发布。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,我按照本教程,将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>

我希望这可以帮助别人。