WPF中嵌入Skyline提供的COM组件填坑
网上有很多关于在WPF中使用的Skyline提供的COM组件的教程,但大都雷同一律,其中很多的细节均为涉及,本文意在在其原基础上进行一些细节的补充。
工具:Visual Studio 2017
1. 在Visula Studio 中创建WPF工程

2. 分别添加对WindowsFormsIntegration,System.Windows.Forms,TerraExplorerX.dll(Skyline COM组件程序集) 程序集的引用。
3 实例代码:
MainWindow.xaml.cs
using System.Windows;
using System.Windows.Forms.Integration;
namespace SkylineDemo {
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public SGWorld sGWorld = null;
public MainWindow()
{
InitializeComponent();
//创建winform控件宿主对象
WindowsFormsHost te3DWindowHost = new WindowsFormsHost();
AxTerraExplorerX.AxTE3DWindow axTE3DWindow = new AxTerraExplorerX.AxTE3DWindow();
//将待寄宿的对象添加至宿主对象中
te3DWindowHost.Child = axTE3DWindow;
//将该宿主对象添加至WPF控件中
DockPanelTE3DWindow.Children.Add(te3DWindowHost);
WindowsFormsHost te3DInformatioinHost = new WindowsFormsHost();
AxTerraExplorerX.AxTEInformationWindow axTEInformationWindow = new AxTerraExplorerX.AxTEInformationWindow();
te3DInformatioinHost.Child = axTEInformationWindow;
DockPanerTEInformation.Children.Add(te3DInformatioinHost);
} /// <summary>
/// 窗体初始化完毕后加载.fly文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Window_Loaded(object sender, RoutedEventArgs e)
{
sGWorld = new SGWorld();
sGWorld.Project.Open(@"E:\SkylineWebDemo\Default.fly");
}
}
}
MainWIndow.xaml
<Window x:Class="SkylineDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:skyline="clr-namespace:AxTerraExplorerX;assembly=AxInterop.TerraExplorerX"
xmlns:local="clr-namespace:SkylineDemo"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="4*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<DockPanel Grid.Column="0" Background="Red" Name="DockPanerTEInformation" ></DockPanel>
<DockPanel Grid.Column="1" Name="DockPanelTE3DWindow" Background="PowderBlue" ></DockPanel>
<!-- 使用xaml方式 -->
<!-- <DockPanel Grid.Column="0" x:Name="docProjectTree">
<WindowsFormsHost>
<skyline:AxTEInformationWindow x:Name="projectTree"></skyline:AxTEInformationWindow>
</WindowsFormsHost>
</DockPanel>
<DockPanel Grid.Column="1" x:Name="docSGWorld" Background="Orange">
<WindowsFormsHost>
<skyline:AxTE3DWindow x:Name="sgWorld"></skyline:AxTE3DWindow>
</WindowsFormsHost>
</DockPanel> -->
</Grid>
</Window>
将上面的实例代码加入测试项目中后发现任然无法运行,原因是找不到TerraExplorerX 这个命名空间,经过查阅官方文档:

大意就是说:当一个com组件添加到.net(应该特质winform工程,wpf工具箱中无法直接使用com组件)工程后会自动创建interop dll。你可以在项目的obj目录中找到"Interop.TerraExplorerX.dll"。这个dll是com组件和.net组件的桥梁。
所以我们需要对wpf工程添加Interop.TerraExplorer.dll 的引用,如果没有可以新建WinForm工程,引入com后将生成的Interop.TerraExplorer.dll拷贝到wpf项目中,并添加引用,自此wpf项目已经可以编译,运行,自此我们已经顺利完成skyline com组件在wpf项目中的引入,如图:

PS:若wpf项目仍然无法正常运行,请做如下设置:
1. 将TerraExplorerX程序集嵌入互操作类型设置为False

2. 将解决方案平台架构设置为对应的架构,由于这个我使用的是TerraExplorerPro 6.6.1的版本,因此设置为x86架构,如果使用的是7.x的版本,那么对应配置为x64架构即可

WPF中嵌入Skyline提供的COM组件填坑的更多相关文章
- 把演讲人的桌面、头像、声音合成后推送到 指定的直播流平台上; 录制电脑桌面、摄像头头像、声音保存为本地视频; 适用于讲课老师、医生等演讲内容保存为视频; 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案
提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案 Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: ...
- 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案
Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: 1. 在winform中操作ppt,翻页.播放.退出:显示 总页数.当前播放页数 2. 启动播放ppt时录制视 ...
- WPF中嵌入WinForm中的webbrowser控件
原文:WPF中嵌入WinForm中的webbrowser控件 使用VS2008创建WPF应用程序,需使用webbrowser.从工具箱中添加WPF组件中的webbrowser发现其中有很多属性事件不能 ...
- WPF中嵌入普通Win32程序的方法
公司现在在研发基于.Net中WPF技术的产品,由于要兼容旧有产品,比如一些旧有的Win32程序.第三方的Win32程序等等,还要实现自动登录这些外部Win32程序,因此必须能够将这些程序整合到我们的系 ...
- WPF中嵌入Office编辑器(支持Word、Excel、PPT、Visio等)
现在有一个项目,需要使用wpf做一个简单的客户端,用来生成word.excel.ppt.visio等文档,这就需要能够在wpf中嵌入office的编辑器,并对office文档进行编辑. 在网上搜索了一 ...
- 在WPF中嵌入WebBrowser可视化页面
无论是哪种C/S技术,涉及数据可视化就非常的累赘了,当然大神也一定有,只不过面向大多数人,还是通过网页来实现,有的时候不想把这两个功能分开,一般会是客户的原因,所以我们打算在WPF中嵌入WebBrow ...
- ubuntu 14.04中安装 ruby on rails 环境(填坑版) 呕血推荐
环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 开发相关: ruby 2.2.0 rails 4.2.0 sublime text 3 本文说明:所有的命令均在$ 之后,若 ...
- WPF中嵌入Flash(ActiveX)
1. 建立 WPF Application. 首先,建立一个名为 FlashinWPF 的 WPF Application 2. 设置 Window 属性. 在 XAML 中修改 Window 的属性 ...
- MySQL主从复制中常见的3个错误及填坑方案
一.问题描述 主从复制错误一直是MySQL DBA一直填不完的坑,如鲠在喉,也有人说mysql主从复制不稳定云云,其实MySQL复制比我们想象中要坚强得多,而绝大部分DBA却认为只要跳过错误继续复制就 ...
随机推荐
- sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用)
SQL 列转行,即多行合并成一条 需求:按照分组,将多条记录内容合并成一条,效果如下: 数据库示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district ...
- C# 操作 MongoDB
今项目使用Mongodb,C#操作MongoDB使用MongoDB.Driver.dll库(Nuget),写了个小Demo,如下: using System; using System.Collect ...
- 接上一篇,Springcloud使用feignclient远程调用服务404 ,为什么去掉context-path后,就能够调通
一.问题回顾 如果application.properties文件中配置了 #项目路径 server.servlet.context-path=/pear-cache-service 则feigncl ...
- 【转】c#中@的3种作用
源地址:https://www.cnblogs.com/linkbiz/p/6380814.html
- 【离散数学】SDUT OJ 补图
补图 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 题目给出一个无向图,求该无向图关 ...
- 浅谈C#中的委托、事件与异步
从刚接触c#编程到现在,差不多快有一年的时间了.在学习过程中,有很多地方始终似是而非,直到最近才弄明白. 本文将先介绍用法,后评断功能. 一.委托 基本用法: 1.声明一个委托类型.委托就像是‘类'一 ...
- LeetCode10. 正则表达式匹配
10. 正则表达式匹配 描述 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该 ...
- Codeforces - 570D 离散DFS序 特殊的子树统计 (暴力出奇迹)
题意:给定一棵树,树上每个节点有对应的字符,多次询问在\(u\)子树的深度为\(d\)的所有节点上的字符任意组合能否凑成一个回文串 把dfs序存储在一个二维线性表中,一个维度记录字符另一个维度记录深度 ...
- BZOJ - 4260 01字典树+前后缀
题意:给定\(a[1...n]\),求\((a_i⊕a_i+1⊕...⊕a_j)+(a_p⊕a_{p+1}⊕...⊕a_{q})\)的最大值,其中\(1≤i≤j<p≤q≤n\) 前后缀最优解预处 ...
- Codeforces - 617E 年轻人的第一道莫队
我对莫队算法最为纠结的地方就是区间端点处,应该是像代码里那样理解吧 cnt[i]表示i出现的次数 maxn开2e6比较保险 /*H E A D*/ struct Query{ int l,r,id; ...