当前位置: 首页 > news >正文

DevExpress WinForms中文教程 - HTML CSS支持的实战应用(二)

DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

在这篇文章中,我们将概述使用DevExpress WinForms HTML/CSS引擎/模板时重要的注意事项。如果您是DevExpress的新手或正在考虑使用我们的WinForms UI库来开发即将到来的项目,并且尚未了解DevExpress WinForms HTML/CSS功能的潜力,请先花点时间查看以下在线内容:HTML & CSS Markup for WinForms UI | DevExpress

在上文中我们主要为大家介绍了如何使用HTML/CSS,本文将继续介绍使用HTML/CSS的一些场景,请继续关注我们哦~

DevExpress新旧版本帮助文档 下载可进QQ qun获取:169725316

高级场景

以下使用场景需要具备DevExpress WinForms UI控件和HTML/CSS的高级知识。

创建复杂的数据输入表单(高级)

HTML/CSS模板允许您创建完全自定义的数据表单,如果DevExpress WinForms LayoutControl不能达到您的预期效果,那么我们建议使用HTML/CSS模板。使用HTML/CSS从头开始构建布局可能很耗时,特别是对于具有多个字段的复杂表单。DevExpress的LayoutControl在构建时考虑了可访问性,这包括适当的标签、键盘导航支持以及与屏幕阅读器的兼容性等特性。

使用CustomDraw显示交互式元素~(高级)

并非所有的DevExpress WinForms UI控件都支持鼠标事件(出于性能原因),这个限制并不妨碍交互UI元素在DevExpress控件中显示。尽管如此,它确实需要编写更复杂的代码:

DxHtmlPainterContext ctx = new DxHtmlPainterContext(); HtmlTemplate htmlTemplate = new HtmlTemplate( Loader.Load("ListBoxEmptyForeground.html"), Loader.Load("ListBoxEmptyForeground.css")); listControl.CustomDrawEmptyForeground += (s, e) => { e.DrawHtml(htmlTemplate, ctx); }; // Handles UI feedback (hover/cursor). listControl.MouseMove += (s, e) => { if(listControl.ItemCount == 0) { ctx.OnMouseMove(e); listControl.Cursor = ctx.GetCursor(e.Location); listControl.Invalidate(); } else listControl.Cursor = Cursors.Default; }; // Handles Click within the btnAdd element. var items = Enumerable.Range(1, 10) .Select(n => string.Format("Item #{0:d2}", n)) .ToArray(); listControl.MouseDown += (s, e) => { if(listControl.ItemCount == 0 && e.Button == MouseButtons.Left) { var clickInfo = ctx.CalcHitInfo(e.Location); if(clickInfo != null && clickInfo.HasId("btnAdd")) listControl.Items.AddRange(items); } };

使用CustomDraw显示UI元素并绑定关联状态到数据~(高级)

与静态模板不同,数据感知模板呈现需要编写更多代码(特别是需要从不同的源检索数据时)。下面的示例在Grid单元格中绘制销售徽章,折扣大小是从不同的数据源获得的。

using DevExpress.XtraEditors; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraGrid.Views.Base; using System.Collections.Generic; namespace DXApplication { public partial class Form1 : XtraForm { Dictionary<string, double> discounts = new Dictionary<string, double>() { { "A", 0.3 }, { "B", 0.45 }, { "C", 0.2 } }; public Form1() { InitializeComponent(); gridControl1.DataSource = new List<Product>() { new Product(){ Category = "A", Name = "AA", Price = 159.99}, new Product(){ Category = "A", Name = "AB", Price = 159.99}, new Product(){ Category = "B", Name = "BA", Price = 49.99}, new Product(){ Category = "B", Name = "BB", Price = 89.99}, new Product(){ Category = "C", Name = "CA", Price = 799.99}, }; gridView1.CustomDrawCell += GridView1_CustomDrawCell; } void GridView1_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e) { e.DefaultDraw(); e.Handled = true; GridView view = sender as GridView; string category = view.GetRowCellValue(e.RowHandle, view.Columns["Category"]) as string; if (e.Column.FieldName == "Price" && discounts.ContainsKey(category)){ e.DrawHtml(htmlTemplateSaleBadge, args => { args.SetFieldValue("Discount", discounts[category].ToString("p0")); }); } } } public class Product { public string Name { get; set; } public string Category { get; set; } public double Price { get; set; } } }
使用HTML/CSS创建完全自定义UI控件(高级)

DevExpress WinForms HtmlContentControl是使用HTML-CSS标记构建WinForms UI的“表面”,WinForms HtmlContentPopup是它的弹出菜单版本。这些组件从HTML/CSS代码生成一个WinForms界面,并允许您设计定制的WinForms UI控件。使用DevExpress组件和HTML/CSS创建自定义UI控件是一项高级技术,需要深入了解UI开发的两种技术/细微差别。

可视化集合(高级)

数据源可能包括存储项目集合的数据字段:列表、数组、数据集等。<dx-collection>标签是一个唯一的DevExpress元素,它允许您为需要可视化的项指定集合属性(以及必须应用于这些项的模板)。使用自定义标记(如<dx-collection>)会对HTML模板施加特定的要求,以实现适当的功能。

使用DevExpress WinForms HTML & CSS引擎时不要做的事
  • 不要创建复杂的嵌套flex布局
    (例如,3个或更多嵌套的flex面板)
  • 不要创建CSS动画
  • 在处理UI控件事件时不要修改HTML元素
  • 不要在基于HTML元素的HTML模板中实现逻辑
    最好在模型中创建一个单独的属性,并在模型中计算逻辑。
  • 不要按原样使用外部资源中预先编写的HTML/CSS代码
    这样的代码可能无法工作,因为不支持所有的HTML标签/属性。
http://www.jsqmd.com/news/1201753/

相关文章:

  • 全维透视·镜像孪生:评标场所穿透式透明化与动态重构管控系统
  • 在终端中创造生命:Ternimal 的奇幻艺术与技术实现
  • 校园一卡通密钥管理系统
  • MPL_ROS部署与优化:性能调优、实时性保证与系统集成最佳实践
  • 如何快速上手Voyeur.js:10个简单技巧让DOM操作变得优雅
  • 海口香奈儿 LV 包包回收探店分享,逸程多年老店交易流程公开清晰 - 全城热点
  • 南宁黄金回收渠道,正规资质交易留存凭证 - 每日生活报
  • AI Excel公式生成器实测报告:输入中文指令→输出无错数组公式,3分钟上手,仅限前500名开发者体验
  • 合肥蜀山区靠谱回收门店实测:本地实体门店逸程回收香奈儿,鉴定专业、报价透明 - 逸程奢侈品回收中心
  • prettyplease vs rustfmt vs rustc_ast_pretty:三大Rust格式化工具深度对比
  • 如何快速上手OpenGL开发?OpenGL-Examples骨架程序00skeleton.cpp详尽解析
  • Aurelia与Webpack集成教程:终极前端构建流程优化指南
  • 【企业级提示词安全白皮书】:金融/医疗/法律三大高敏领域提示词合规设计指南(含GDPR与等保2.0双认证校验表)
  • Vibe语音转文字:3分钟掌握开源Whisper桌面应用实战
  • 如何快速掌握中文大语言模型:5个简单步骤指南
  • 2026深圳K金彩金回收避坑指南|18K/14K金折价真相,杜绝混收乱判、低价亏损变现攻略 - 全国二奢机构参考
  • 2026济南高端奢品黄金回收榜单|多品牌对比,本土优质机构优选 - 禹竞奢收行
  • 如何构建可扩展的企业级数据平台:Metabase性能优化终极指南
  • Coasty API 全解析:从任务运行到机器配置,掌握自主工作流与控制方法
  • 智能卤菜销售平台
  • 全屋门窗怎么选?2026年十大优质门窗品牌与家装适配指南
  • Easy-Query在微服务架构中的应用:分布式事务与数据一致性终极指南
  • CANN Ascend C TensorDesc GetShape API
  • 2026洛阳县区联考面试主流培训服务维度测评榜单 - 互联网科技品牌测评
  • tRPC.panel()高级技巧:自定义Transformer与SuperJSON集成
  • shared_ptr 和 unique_ptr 深入探秘(CPP)
  • 2026年7月重庆新房/软装/全屋/装修装饰公司哪家好?五大品牌深度横评与选购指南 - 品牌鉴赏官2026
  • Tess-4-27B-OptiQ-4bit量化原理详解:从52GB到19GB的压缩魔法
  • CCD二段除铁铝----添加黄钠铁矾晶种(NaFe₃(SO₄)₂(OH)₆),优先吸附Fe³⁺
  • Clypra过渡动画制作:自定义视频转场效果