Winform/WPF利用CefSharp集成vue开发

这篇具有很好参考价值的文章主要介绍了Winform/WPF利用CefSharp集成vue开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文发表在我的个人搭建的博客网站上:博客链接,下面是直接复制过来的

Winform/WPF集成vue开发

前言

有时候因为各种原因,可能在开发winform或wpf项目的时候需要嵌入web项目,而目前vue在web开发中还是非常流行的,今天有空琢磨了一下怎么在winform中集成vue进行开发,当然,winform能实现,wpf也是一样的。

目前希望达到的效果是,能够在winform中显示web界面,并且能够与vue中的各个组件进行交互,也就是调用vue中的函数,及vue函数调用C#中的方法。

项目创建

首先,先用vue-cli建个demo项目,这里就不进行详细介绍了,网上教程很多,由于我之前写了一个vue的demo项目,因此这里直接拿过来用,项目结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c4CX3WJS-1641622687742)(WinformWPF%E9%9B%86%E6%88%90vue%E5%BC%80%E5%8F%91.assets/image-20220108133036054.png)]

Login.vue组件是在打开之后就显示的登录界面,这个不重要,用vue新建项目的初始界面也行。

然后在VS里面新建一个WPF或者Winform项目,我这里用的是winform,wpf同理,创建好后用nuget安装一下CefSharp.WinForms,我用的版本是最新版96.0.180.0,接着在窗体界面上加几个button和一个panel,panel用来装cefsharp的控件类,最后弄完了,窗体界面差不多是这个样子的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mdOtozue-1641622687743)(WinformWPF%E9%9B%86%E6%88%90vue%E5%BC%80%E5%8F%91.assets/image-20220108133352742.png)]

把Vue集成进winform

使用npm run build命令生成打包后的dist文件夹,直接把文件夹放在winform构建好的debug文件夹下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qjOD1FZd-1641622687744)(WinformWPF%E9%9B%86%E6%88%90vue%E5%BC%80%E5%8F%91.assets/image-20220108133535260.png)]

注意,index.html文件内对css和js的引用路径必须是相对路径./,不能是/,不对的话记得替换一下,然后使用如下代码加载html:

 private void button1_Click(object sender, EventArgs e)
 {
     string path = AppDomain.CurrentDomain.BaseDirectory + @"dist/index.html";
     browser = new ChromiumWebBrowser(path);
     browser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;

    webPanel.Controls.Add(browser);
}

这个事件对应了加载浏览器按钮的点击事件,全部搞好后运行winform程序,点击第一个按钮,如果出现下面的界面说明成功了:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1QkrbIwG-1641622687745)(WinformWPF%E9%9B%86%E6%88%90vue%E5%BC%80%E5%8F%91.assets/image-20220108133859426.png)]

Winform调用Vue组件

winform在正常情况下是没有办法直接调到vue组件内部的事件的,会提示undefine,因此我们选择迂回战术,通过document.addEventListener的方式来监听自定义事件,然后再通过vue的全局事件总线来发布消息,传给需要的组件。

首先,我们先在main.js文件内给vue加个全局的事件总线:

let bus = new Vue();
Vue.prototype.$EventBus = bus;

接着,还是在main.js文件,使用document来添加事件监听:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4v5hgfdS-1641622687746)(WinformWPF%E9%9B%86%E6%88%90vue%E5%BC%80%E5%8F%91.assets/image-20220108134115465.png)]

在对应的Login.vue组件内,我们通过下面代码来添加组件对消息的订阅和取消订阅:

mounted() {
    this.$EventBus.$on("test", (msg) => {
      alert("Login组件接收到了消息:" + msg);
      console.log("接收到了消息" + msg);
    });
},
unmounted() {
  this.$EventBus.$off();
},

vue这边就添加完成了,重新npm run build之后再复制到winform的debug文件夹下,还是一样的套路。

接着我们就可以在winform中调用事件触发了:

  private void button2_Click(object sender, EventArgs e)
  {
      browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.dispatchEvent(new CustomEvent('test',{detail:{param1:'我是参数1',param2:'我是参数2'}}))");
  }

来看看运行的结果,在启动项目后用browser.ShowDevTools()这段代码把浏览器的开发者工具打开,然后我们调用上面的button2_click事件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b76bgp8t-1641622687746)(WinformWPF%E9%9B%86%E6%88%90vue%E5%BC%80%E5%8F%91.assets/image-20220108134810930.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZUPWysZr-1641622687747)(WinformWPF%E9%9B%86%E6%88%90vue%E5%BC%80%E5%8F%91.assets/image-20220108134829667.png)]

大功告成,winform调vue就这样结束了。

Vue调用winform

Vue调用winform比较简单,首先在winform代码中添加一个要注入浏览器的对象:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQJucNJz-1641622687747)(WinformWPF%E9%9B%86%E6%88%90vue%E5%BC%80%E5%8F%91.assets/image-20220108140227775.png)]

然后在vue的组件里面随便写个button,在这个button对应的click事件里面加上这两行代码:

CefSharp.BindObjectAsync("csharpinstance");
csharpinstance.func("para");

就这样写就完成了,记得重新build一下复制到debug文件夹下,再次运行,看看能不能成功调用并且把值传过去:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3yW0ZPa-1641622687748)(WinformWPF%E9%9B%86%E6%88%90vue%E5%BC%80%E5%8F%91.assets/image-20220108140033924.png)]

大功告成!

后话

虽然winform和vue相互调用就这样写完了,看似比较简单,但是其实还有很多困难点存在,比如winform要实现无窗体标题栏下的拖拽、主题替换、半透明,或者WPF里面要实现一些放大缩小的动画效果,也不好保持两边动画的统一,所有感觉没有十分必要的情况下,最好还是统一用winform/wpf,或者直接用浏览器端,不套个web进去。文章来源地址https://www.toymoban.com/news/detail-473826.html

到了这里,关于Winform/WPF利用CefSharp集成vue开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 9i物联网浏览器(cef_114.2.110&114.2.100支持H264视频)WinForm-CefSharp114(5735)视频版本体验

    更新:2023.6.25 版本: Cef_114.2.110和114.2.100 +chromium- 114.0.5735.134 的32位和64位 说明:支持图片,mp3,mp4(H264)多媒体 测试环境:windows server 2019(其他环境没测,一般问题.NET4.5.2+及vc++运行库问题) 测试网址:www.html5test.com 声明 :本博是交流学习的内容,应用案例定制版浏览器

    2024年02月11日
    浏览(49)
  • 【小沐学C#】WPF中嵌入web网页控件(WebBrowser、WebView2、CefSharp)

    使用 Windows Presentation Foundation (WPF),你可以创建适用于 Windows 且具有非凡视觉效果的桌面客户端应用程序。 WPF 的核心是一个与分辨率无关且基于矢量的呈现引擎,旨在充分利用现代图形硬件。 WPF 通过一套完善的应用程序开发功能对该核心进行了扩展,这些功能包括可扩展应

    2024年02月03日
    浏览(56)
  • 使用DevExpress22.X(Patch)控件库在VisualStudio2022使用C#进行Winform、WPF应用的开发,看这一篇就够了!

            写在开头,Dev Express是个十分强大的控件库(下文简称Dev),但碍于其高昂的使用费用,“出于学习目的”,我们一般使用的都是Patch版本(在版权意识日趋加强的当下,不要提那两个字,现在加上那些字,百度都搜不出内容)。         最重要的 Patch资源 (包括

    2024年02月09日
    浏览(93)
  • 9i物联网浏览器(cef_114.2.120&114.2.100,支持H264视频mp3,mp4)WinForm-CefSharp(5735分支)多媒体版本体验

    更新:2023.6.25 版本: Cef_114.2.110和114.2.100 +chromium- 114.0.5735.134 的32位和64位 说明:支持图片,mp3,mp4(H264)多媒体 测试环境:windows server 2019(其他环境没测,一般问题.NET4.5.2+及vc++运行库问题) 测试网址:www.html5test.com 声明 :本博是交流学习的内容,应用案例定制版浏览器

    2024年02月16日
    浏览(55)
  • 如何在WPF中使用Winform控件

            要在WPF中使用WInform组件,必须将WInform组件放在宿主WindowsFormsHost中.  WindowsFormsHost 是WPF的一个控件,它允许在WPF应用程序中托管Windows Forms控件。 要使用 WindowsFormsHost 控件,您需要在WPF项目中添加对 WindowsFormsIntegration 程序集的引用。这是如何做的步骤: 在解决方案

    2024年02月12日
    浏览(45)
  • WPF 与 Winform 的区别以及应用场景

    一、WPF框架以及应用场景 ​ WPF框架 ​ 1.1、WPF与WinForm ​ WPF :https://github.com/dotnet/wpf ​ SilverLight : Web富客户端 ​ 1.2、异/同点 ​ 共同点:最终的输出结果都是客户端应用,实现 人机交互。 ​ 异同点: ​ 界面渲染不一样 ​ 业务逻辑控制不一样(界面设计,色彩、尺寸比

    2024年02月09日
    浏览(39)
  • Visual Studio 2022 WinForm/Wpf打包安装程序

    方法1.手动下载安装包: Microsoft Visual Studio Installer Projects 2022 方法2.Visual Studio中安装 菜单栏中选中【扩展】-【管理扩展】-【联机】中搜索Microsoft Visual Studio Installer并安装 在当前解决方案下添加-新建项目-Setup Project 项目添加成功之后,将需要打包的项目生成后的bin目录下的

    2024年02月04日
    浏览(73)
  • “利用Python使用API进行数据集成和自动化开发的指南“

    标题:利用Python使用API进行数据集成和自动化开发的指南 摘要:本文将为读者提供一个详细而全面的指南,教您如何使用Python编程语言来利用API进行数据集成和自动化开发。我们将介绍API的基本概念,探讨Python中常用的API库和工具,以及演示如何通过编写Python代码来调用和处

    2024年02月13日
    浏览(65)
  • [C#] WinForm/WPF 实现数据库连接与操作(MySQL)

    目录 🌿前言 🌿MySQL数据库简介 🌿数据库的基本概念 🌿ADO.NET体系结构 数据提供程序(.NET Framework Data Provider) 程序数据集(DataSet) 🌿数据库的访问形式 🌿数据库的连接 🌿实现增查改删(CRUD)操作 CRUD SQL常用语句 程序实现数据读取操作 程序实现增删改操作 数据库的使用在涉及

    2024年02月09日
    浏览(44)
  • 禁用WinForm调用WPF控件时在高DPI下自动缩放

    在项目的Assemblyinfo.cs文件里插入一个参数 方法一:通过程序清单进行设置 自 Visual Studio 2015 起,此设置已存在于 中 app.manifest ,只需取消注释即可。 方法二:以编程方式设置默认感知 在进程中创建 HWND 窗口后,不再支持更改 DPI 感知模式。 如果要以编程方式设置进程默认

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包