ComponentOne使用技巧——从Winform穿越到WPF

概述

WPF 和 Winform 是两个单独的平台,但二者又都是基于 .NET 4.0 以上版本开发的,所以很多.NET开发人员就开始研究如何在WPF中使用Winform。微软已经架设了两个开发平台的之间的通信桥梁,目前为止二者相互转换使用已经相当成熟了,今天主要给大家讲讲如何在这两个平台下调用 ComponentOne 的控件。

本文主要用 FlexReport .NET报表控件,作为介质进行两个平台的链接

Step 1

首先,我们还是把两个平台的基本通信通道搭建起来,很简单,网上有很多步骤,总结起来主要分三步:

  1. 添加两个引用:WindowsFormsIntegration.dll(负责整合WPF和Windows)、System.Windows.Forms.
  2. 在 XAML文件中添加两个引用(粗体部分):
<Window x:Class="CrossBowDemo.MainWindow"
xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Hosting Windows Forms Control In WPF"
Height="300"
Width="650"
ResizeMode="NoResize"
Loaded="WindowLoadedHandler">
 < /Window>

解释一下,这段代码真正起作用的是这个引用WindowsFormsIntegration.dll,而这个引用System.Windows.Forms 指的是Winform里面的微软的原生态控件,所以在用到ComponentOne时,可以不引用它。

我们先看一个示例:通过微软原生态控件在WPF中使用Winform,代码如下:

<wfi:WindowsFormsHost>
        <wf:DataGridView x:Name="Dg"  Dock="Fill" SelectionMode="FullRowSelect">            
        </wf:DataGridView>
    </wfi:WindowsFormsHost>

WindowsFormsHost其实是Winform在WPF的容器,所以Winform的控件显示都要在这个容器里面。

Setp2

上面我们说了,我们以FlexReport为介质进行通信,那我们需要准备的几个小步骤:

  1. Winform下FlexReport的模板
  2. 相关引用

注意:这里面的引用是Winform的引用。同样,我们需要在xmal中引用:

xmlns:cc11="clr-namespace:C1.Win.FlexViewer;assembly=C1.Win.FlexViewer.4"

在布局中添加可供报表预览的控件

<Grid>
        <wfi:WindowsFormsHost>
            <cc11:C1FlexViewerPane   x:Name="flexViewerPane"  ></cc11:C1FlexViewerPane>
        </wfi:WindowsFormsHost>
    </Grid>

Setp3

我们在后台加载报表

private C1FlexReport _report;
    public Window1()
    {
        InitializeComponent();

        _report = new C1FlexReport();

        // load report definition from resources
        Assembly asm = Assembly.GetExecutingAssembly();
        using (Stream stream = asm.GetManifestResourceStream("WpfApp1.Resources.FlexCommonTasks.flxr"))
            _report.Load(stream, "Chart2D");

        // assign report to the preview pane
        flexViewerPane.DocumentSource = null;
        flexViewerPane.DocumentSource = _report;
    }

注:切记,这里面的报表是Winform平台下的

到这一步,我们工作完成了一大半,还差最后一步点石成金的步骤。很多人以为在这就结束了,但是我们要考虑 ComponentOne License 授权的问题,如何把Winform 的授权在WPF下注册,其实很简单,因为 .NET 的license机制一样,我们只需用同样的方式去注册控件的license ,不过这里推荐手动注册,这很重要,因为一不小心,就会报lc.exe=-1的错误

这里我们都用到了

  • C1FlexViewerPane
  • C1FlexReport

所以我们在license文件中写如下注册信息

C1.Win.FlexReport.C1FlexReport, C1.Win.FlexReport.4 C1.Win.FlexViewer.C1FlexViewerPane, C1.Win.FlexViewer.4

至此,我们就大功告成了。

示例源码下载

本文中的示例源码,请点击此处下载

关于葡萄城

赋能开发者!葡萄城公司成立于 1980 年,是全球领先的集开发工具、商业智能解决方案、管理系统设计工具于一身的软件和服务提供商。西安葡萄城是其在中国的分支机构,面向全球市场提供软件研发服务,并为中国企业的信息化提供国际先进的开发工具、软件和研发咨询服务。葡萄城的控件和软件产品在国内外屡获殊荣,在全球被数十万家企业、学校和政府机构广泛应用。​

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏.NET开发者社区

(码友推荐)2018-07-27 .NET及相关开发资讯速递

11350
来自专栏张善友的专栏

开源软件的最近几个更新值得注意

1、开源版本控制系统Subversion 1.3 正式发布 :Subversion开发小组近日宣布Subversion 1.3 正式发布。SubVersion是...

20260
来自专栏张善友的专栏

再论IBatisNet + Castle进行项目的开发

     随着项目的进展,Castle和IBatisNet给我的惊喜更多。Com+很重,不需要分布式的中小项目慎用,NHibernate虽好,NHibernat...

18690
来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–现金管理(160)-14银企对账-客户收款-承兑汇票-F-36收到承兑汇票

4.5.2 F-36收到银行承兑汇票 收到客户银行承兑汇票支付应收账款,形成财务记账如下: 借:应收票据 贷:应收账款 ? 输入凭证日期、参照、抬头文本 回...

32280
来自专栏贾老师の博客

从手机到internet

16140
来自专栏Fundebug

30个极大提高开发效率的Visual Studio Code插件

译者按: 看完这篇文章,我打算从 Sublime Text 转到 Visual Studio Code 了!

39160
来自专栏吉浦迅科技

C++ AMP双精度Windows环境测试报告

测试日期:2014-2-26 测试环境:华硕ESC1000超算工作站 测试GPU:AMD FirePro S7000 测试系统:Win7 & Win 8 ...

309110
来自专栏月色的自留地

小技巧,把Markdown文本发布到微信公众号文章

34130
来自专栏静晴轩

SublimeText下写作利器之MarkdownEditing

之前有陆续学习和整理关于追寻高效工作的一路折腾;毕竟技无止境,需要不断的学习总结和对比。而其中诸多内容也是需要分支出来一一细谈(其实就是更为详尽搜集些资料,然后...

38350
来自专栏me的随笔

.NET常用第三方库(包)总结

以上二位都是从JAVA阵营移植过来的,对于分布式系统使用文本日志追踪问题也是比较恶心的一件事儿

12620

扫码关注云+社区

领取腾讯云代金券