• 集成WPF与Windows窗体


    介绍 本文讨论如何将WPF XPS文档查看器集成到Windows窗体应用程序中。 “WPF给我们带来了一个美好的未来,我们都应该开始使用它,把我们所有的产品都换成它。” 这是个好主意,但对我们大多数人来说,这是不可能的。例如,我们的主要产品有成千上万行代码和数百个表单。把所有这些都扔进垃圾桶,然后重新开始,这将是经济上的自杀。使用WPF开发新的领域,并将它们与我们的Windows窗体解决方案集成,这将是一个不错的选择。 ParitorWindowsFormWPFIntegration 背景 不久前,我开始研究如何传递电子文档。PDF是一种传统的方法,但微软的XPS提供了更多,所以我决定遵循这条道路。从编程的角度来看,它呈现的是一系列的挑战,创建、显示、交付,等等,我的解决方案,我将与你分享未来几个月但是现在我要讨论的任务显示一个XPS文档使用Visual Studio 2008的文档查看器和嵌入到一个Windows窗体的解决方案。在此过程中,我希望能够演示将WPF与Windows窗体集成是多么容易。 使用的代码 作为练习,我在VS2008中创建了一个解决方案,它由一个WPF库类项目和一个Windows窗体应用程序项目组成。WPF项目包含一个Windows窗体用户控件,该控件本身包含一个WPF文档查看器控件。Windows窗体项目只包含一个用于演示用户控件使用的窗体。 pic2.jpg 当您添加WPF库类时,Visual Studio将为您添加基本引用,但由于我们将添加一个Windows窗体用户控件,因此我们需要添加一些额外的引用。 默认情况下添加以下引用: PresentationCorePresentationFrameworkSystemSystem.CoreSystem.DataSystem.Data.DataSetExtensionsSystem.XMLSystem.Xml.LinqWindowsBase 您将需要添加一个引用到: ReachFrameworkSystem.DrawingSystem.PrintingSystem.Windows.FormsUIAutomationProviderWindowsFormsIntegration 确保你的参考资料和上面一样。 将WPF用户控件添加到项目中,并在其中添加所需的WPF功能。在我的例子中,我只是添加了一个Windows文档查看器。 现在我们需要添加将公开给Windows窗体应用程序的Windows窗体用户控件。在代码中,添加以下import语句。 隐藏,复制Code

    Imports System.Windows.Forms.Integration

    在表单Usercontrol中,声明WPF Usercontrol的一个实例,在load事件中,创建实例并执行管道操作。我们通过创建一个ElementHost实例来实现这一点。这基本上是一个兼容Windows窗体和WPF的容器。我们创建WPF控件的一个实例,并将其设置为ElementHost的子元素,然后将ElemenHost添加到控件集合中。 隐藏,复制Code

    Private WithEvents wpfExtension As ParitorWPF.XPSDocumentViewer
    
    Private Sub ParitorDocumentViewer_Load_
        (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim host As New ElementHost
        wpfExtension = New ParitorWPF.XPSDocumentViewer
        host.Child = wpfExtension
        host.Dock = Forms.DockStyle.Fill
        Me.Controls.Add(host)
    
    End Sub

    我们还可以向用户控件添加传递方法,以调用WPF控件或捕获其事件。 现在我们可以向Windows窗体应用程序添加一个窗体,并将我们的Windows窗体用户控件放置在其中。当我们运行表单时,它会显示WPF应用程序,在我的例子中是文档查看器。 它就这么简单——所以也许我们不能仅仅替换我们现有的Windows窗体解决方案,但希望我已经向你展示了逐渐添加WPF函数是多么容易。 历史 初始版本 本文转载于:http://www.diyabc.com/frontweb/news6946.html

  • 相关阅读:
    占位博客
    占位博客
    占位博客
    占位
    占位
    占位
    占位
    占位
    python字典设置初始值setdefault()与get()
    自然语言处理如何入门
  • 原文地址:https://www.cnblogs.com/Dincat/p/13467460.html
Copyright © 2020-2023  润新知