「DevExpress中文教程」如何将DevExtreme JS HTML编辑器集成到WinForms应用

news2024/12/24 21:54:08

在本文中我们将演示一个混合实现:如何将web UI工具集成到WinForms桌面应用程序中。具体来说,我们将把DevExtreme JavaScript WYSIWYG HTML编辑器(作为DevExtreme UI组件套件的一部分发布的组件)集成到Windows Forms应用程序中。

DevExpress中文教程图集

获取DevExtreme v23.2正式版下载(Q技术交流:909157416)

在开始之前,首先为大家列出一些可能会遇到的问题:

  • DevExtreme HTML编辑器不支持所有与HTML相关的功能和标签(阅读限制)。
  • 为了无缝地将Web HTML编辑器集成到桌面UI中,您可能需要隐藏其工具栏和对话框(而不是在WinForms应用程序中实现它们)。
  • 您需要管理皮肤/主题的变化,以确保在WinForms和Web UI控件之间有一个一致的外观和感觉,减少应用程序本身视觉不一致的风险。

注意:在WinForms桌面应用程序中使用DevExpress JavaScript HTML编辑器需要一个有效的DevExtreme授权。

入门指南

官方已经创建了一个示例WinForms应用程序,它集成了基于web的HTML编辑器组件。

要开始,您必须:

1. 从GitHub下载我们的示例WinForms应用程序。

2. 在Visual Studio IDE中打开解决方案。

3. 使用 Project Converter (项目转换器)工具更新基于您当前版本的DevExpress引用。

4. 构建解决方案并运行应用程序。

实现细节

我们将客户端HTML编辑器封装到Microsoft Edge WebView2控件(dxhtmlleditorwebview)中,WebView2是一个可嵌入的浏览器控件,它允许您在为WinForms和WPF构建桌面应用程序时使用web技术,如HTML、CSS和JavaScript。

HTML编辑器功能
  • 导出到HTML和Markdown
  • 内联格式和块格式
  • 复制/粘贴富文本格式
  • 插入媒体和上传图像
  • 表格
  • 邮件合并
  • 用户界面定制
  • Light/Dark主题

我们的示例还实现了以下内容:

  • 自动同步WinForms应用程序皮肤与HTML编辑器的主题
    当从深色调色板切换到浅色调色板(反之亦然)时,相应的主题(深色或浅色)将应用于HTML Editor。

DevExpress中文教程图集

  • 撤消/重做功能区命令。
    用户可以在HTML编辑器中撤销/重做操作。

DevExpress中文教程图集

公共API和事件

我们在DXHtmlEditorWebView类中实现了以下公共方法和事件:

  • GetHtmlText() – 以HTML格式导出HTML编辑器的内容。
  • SetHtmlText(string htmlString) – 设置HTML编辑器的内容,传递给SetHtmlText方法的HTML字符串应该是格式良好的HTML标记,此方法将HTML编辑器中的任何现有内容替换为新的HTML内容。
  • SetTheme(string themeName) – 将指定的主题应用于HTML编辑器。
  • Undo() –恢复在HTML编辑器中执行的最新操作或一系列操作。
  • Redo() – 重新应用以前未完成的操作。
  • HtmlChanged
  • HtmlLoaded
在WinForms应用程序中使用HTML编辑器

1. 将DXHtmlEditor复制到您的项目中。

2. 安装Microsoft.Web.WebView2 NuGet包。

3. 打开DXHtmlEditorClient.cs文件然后在OnWebResourceRequested方法中指定默认命名空间:

void OnWebResourceRequested(object sender, CoreWebView2WebResourceRequestedEventArgs e) {
var environment = webView?.Environment;
if(environment == null)
return;
string asset = $@"{nameof(MyDefaultNamespace)}.{nameof(DXHtmlEditor)}.Assets.{e.Request.Uri.Substring(rootURIFilter.Length - 1)}";
// ...
}

4. 对Assets文件夹中的所有文件设置Build Action为“Embedded Resource”。

5. 构建解决方案。

6. 将DXHtmlEditorWebView组件从工具箱中拖放到表单中。

扩展嵌入式HTML编辑器的功能

要将HTML编辑器与“本地”用户界面集成,您应该隐藏它的工具栏/对话框(在../Assets/index.js中),并在WinForms UI中实现相应的UI元素。在我们的例子中,隐藏了HTML编辑器的撤销/重做工具栏命令,并在Ribbon UI中添加了相应的命令。

实现包括以下内容:

1. 在index.js中,我们添加了undo 和 redo函数:

function undo() {
htmlEditor.undo();
}
function redo() {
htmlEditor.redo();
}

2. 在DXHtmlEditorClient.cs中,我们添加了Undo 和 Redo方法:

public async Task Undo() {
await CallDxHtmlEditClient("undo()");
}
public async Task Redo() {
await CallDxHtmlEditClient("redo()");
}

3. 在DXHtmlWebView.cs中,我们添加了Undo 和 Redo方法:

public async Task Undo() {
await EnsureIsLoaded();
await client.Undo();
}
public async Task Redo() {
await EnsureIsLoaded();
await client.Redo();
}

4. 我们添加了Undo 和 Redo项目到Ribbon中,并处理了它们的ItemClick事件:

async void OnUndo(object sender, DevExpress.XtraBars.ItemClickEventArgs e) {
await dxHtmlEditorWebView.Undo();
}
async void OnRedo(object sender, DevExpress.XtraBars.ItemClickEventArgs e) {
await dxHtmlEditorWebView.Redo();
}
总结

这种混合方法的主要好处是能够在.NET桌面应用程序中利用web技术的优势,独家和成熟的web组件(如DevExtreme HTML编辑器)经过了广泛的测试和改进。这些UI组件通常包含广泛的特性集,可以处理各种使用场景。


更多DevExpress线上公开课、中文教程资讯请上中文网获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1552292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka重要配置参数全面解读(重要)

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Kafka重要配置参数全面解读(重要 前言auto.create.topics.enableauto.leader.rebalance.enablelog.retention.{hour|minutes|ms}offsets.topic.num.partitions 和 offsets.topic.replication.factorlo…

Excel:使用VLOOKUP函数,抓取指定数据,后一个列

Excel:使用VLOOKUP函数,抓取指定数据,后一个列 我们有这样一个数据源 要是实现这个页面的赋值 就是对应关系映射 使用 VLOOKUP(A2,Sheet2!$A$2:$B$9,2,FALSE)第一个参数是需要匹配的单元格。 第二个参数是数据源,我这里数据源用的是shee…

[Flutter]环境判断

方式一(推荐) 常量kReleaseMode,它会根据你的应用是以什么模式编译的来获取值。bool.fromEnvironment会从Dart编译时的环境变量中获取值。对于dart.vm.product这个特定的环境变量,它是由Dart VM设置的,用来标明当前是…

SnapGene 5 for Mac 分子生物学软件

SnapGene 5 for Mac是一款专为Mac操作系统设计的分子生物学软件,以其强大的功能和用户友好的界面,为科研人员提供了高效、便捷的基因克隆和分子实验设计体验。 软件下载:SnapGene 5 for Mac v5.3.1中文激活版 这款软件支持DNA构建和克隆设计&…

单摄像头、双目摄像头、多视图系统:了解自动驾驶汽车的传感器

1.鱼眼摄像机 其他摄像机的位置 2.激光雷达 3.Radar 4.sonar 声纳 各个传感器的对比 相机类型 一般来说,相机可以分为单目相机、双目相机和多视角相机。 单目相机:最常见的相机类型,只有一个镜头。双目相机:有两个镜头&…

浅谈Mysql(二)——慢sql、mysql锁、大事务的影响

一、慢sql的危害 不仅对当前查询影响大,查询时间过长;还对其他连接有影响,因为慢sql占用时间过长,导致其他线程,获取连接时间过长,进而导致网关超时等问题; 1.1 explian分析最主要看什么参数 …

20.变量的使用方式和注意事项

文章目录 一、变量的用法二、变量的注意事项三、总结 一、变量的用法 代码示例 public static void main(String[] args) {//1.基本用法// 定义变量,再进行输出int a 10;System.out.println(a);// 10System.out.println(a);// 10//2.变量参与计算int b 30;int c …

TitanIDE与传统 IDE 比较

与传统IDE的比较 TitanIDE 和传统 IDE 属于不同时代的产物,在手工作坊时代,一切都是那么的自然,开发者习惯 Windows 或 MacOS 原生 IDE。不过,随着时代的变迁,软件行业已经步入云原生时代,TitanIDE 是顺应…

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法

联想 lenovoTab 拯救者平板 Y700 二代_TB320FC原厂ZUI_15.0.677 firmware 线刷包9008固件ROM root方法 ro.vendor.config.lgsi.market_name拯救者平板 Y700 ro.vendor.config.lgsi.en.market_nameLegion Tab Y700 #ro.vendor.config.lgsi.short_market_name联想平板 ZUI T # B…

车载以太网AVB交换机 gptp透明时钟 5口 全千兆 SW1500

全千兆车载以太网交换机 一、产品简要分析 5端口千兆车载以太网交换机,包含4个通道的1000BASE-T1接口使用罗森博格H-MTD和泰科MATEnet双接口,1个通道1000BASE-T标准以太网(RJ45接口),可以实现车载以太网多通道交换,千兆和百兆车载…

macOS 13 Ventura (苹果最新系统) v13.6.6正式版

macOS 13 Ventura是苹果电脑的全新操作系统,它为用户带来了众多引人注目的新功能和改进。该系统加强了FaceTime和视频通话的体验,同时优化了邮件、Safari浏览器和日历等内置应用程序,使其更加流畅、快速和安全。特别值得一提的是,…

Gitlab 实现仓库完全迁移,包括所有提交记录、分支、标签

1 方案一&#xff1a;命令 cd <项目目录> git fetch --all git fetch --tags git remote rename origin old-origin #可以不保留 git remote add origin http://***(项目的新仓库地址) #git remote set-url origin <项目的新仓库地址> git push origin --all git…

Redis中的客户端(三)

客户端 身份验证 客户端状态的authenticated属性用于记录客户端是否通过了身份验证: typedef struct redisClient {// ...int authenticated;// ... } redisClient;如果authnticated的值为0&#xff0c;那么表示客户端未通过身份验证&#xff1b;如果authenticated的值为1&a…

【Java程序设计】【C00345】基于Springboot的船舶监造管理系统(有论文)

基于Springboot的船舶监造管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及i…

2024/3/28 IOday1

编写一条学生链表&#xff0c;写一些能够像链表里边添加数据的函数 实现&#xff1a;将链表中的所有内容保存到文件中去 以及 读取文件中的所有内容&#xff0c;加载到链表里 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef int datat…

贪心算法--最大数

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 本题链接https://leetcode.cn/problems/largest-number/description/ class Solution { public:bool static compare(int a, int b){return (to_string(a) to_string(b)) > (to_string(b) to_string(a));}bool operato…

《米小圈动画汉字》—“动起来”汉字就能轻松记住啦!

为了迎合孩子们的兴趣&#xff0c;市面上推出了许多类型的动画片&#xff0c;所谓“动画”是让角色动起来&#xff0c;感染孩子&#xff0c;给孩子带来欢乐。但是&#xff0c;并不是所有动画片都对孩子有益&#xff0c;市面上的大多良莠不齐&#xff0c;孩子分辨不了还可能影响…

【Pt】马灯贴图绘制过程 03-制作油渍、积尘效果

目录 效果 一、制作油渍效果 1.1 基本油渍 1.2 流淌的油渍痕迹 二、制作浮尘效果 三、制作积尘效果 效果 一、制作油渍效果 1.1 基本油渍 将上篇制作的“锈迹_深色”和“锈迹_浅色”两个文件夹再次合并为一个文件夹 这里就命名为“锈迹” 添加一个填充图层 设置Base …

权限提升-Win系统权限提升篇AD内网域控NetLogonADCSPACKDCCVE漏洞

知识点 1、WIN-域内用户到AD域控-CVE-2014-6324 2、WIN-域内用户到AD域控-CVE-2020-1472 3、WIN-域内用户到AD域控-CVE-2021-42287 4、WIN-域内用户到AD域控-CVE-2022-26923 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权…

vulfocus环境搭建(kali搭建)

Vulfocus 是一个漏洞集成平台&#xff0c;将漏洞环境 docker 镜像&#xff0c;放入即可使用&#xff0c;开箱即用。 安装docker环境 个人不建议随意更换apt源&#xff0c;我换了几次遇到很多问题。 apt-get update apt-get upgrade&#xff08;时间很久&#xff09; apt-get i…