我正在尝试使用 WinFormsHost-Control 将 Unity3D-ActiveX 控件嵌入到 WPF-Form 中。
实际上,在VS的属性窗口中设置路径时效果很好,但在我的代码文件中设置时它不会加载任何内容。这是控件的一个已知问题,但我认为我可以简单地复制表单设计器的创建代码并手动初始化它。
当查看初始化代码时,我注意到没有src
代码中的属性,但该属性是在属性窗口中使用的。手动设置属性不起作用(引发错误)。
经过一些测试后,我决定检查孔组件src
财产,但src
属性从未设置,我什至找不到路径的字符串。
最后的想法
我注意到src-path只能位于一个地方:窗口窗体设计器生成的资源,它是AxHost.State http://msdn.microsoft.com/en-us/library/system.windows.forms.axhost.state.aspx-type.
Question
我如何创建一个有效的AxHost.State
用于初始化 Unity3D-ActiveX 控件的对象,该控件应加载我指定的 Unity3D 文件?
这是可行的解决方案,但有点慢(注意:您需要在表单设计器中初始化一次控件并将 OcxState 对象复制到程序集资源中):
// Create a ocx state object with the correct path
_Unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer();
((System.ComponentModel.ISupportInitialize)(_Unity)).BeginInit();
_Unity.OcxState = (AxHost.State)(Resources.Unity3DOcx);
_Unity.TabIndex = 0;
Controls.Add(_Unity);
((System.ComponentModel.ISupportInitialize)(_Unity)).EndInit();
_Unity.src = _File;
AxHost.State state = _Unity.OcxState;
_Unity.Dispose();
// Create the unity web player object
_Unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer();
((System.ComponentModel.ISupportInitialize)(_Unity)).BeginInit();
this.SuspendLayout();
_Unity.Dock = DockStyle.Fill;
_Unity.Name = "Unity";
_Unity.OcxState = state;
_Unity.TabIndex = 0;
Controls.Add(_Unity);
((System.ComponentModel.ISupportInitialize)(_Unity)).EndInit();
this.ResumeLayout(false);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)