• 用DevExpress实现基于HTML&CSS的桌面应用程序的UI(一)


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

    注意:目前基于HTML & CSS的控件正在积极研发中,可以作为技术预览提供,如果需要使用请下载最新版组件体验哦~

    获取DevExpress 最新版下载

    一组控件和组件允许开发人员构建HTML格式的UI,并使用CSS样式自定义UI元素的外观设置、大小、填充和布局选项,不再需要处理自定义绘制事件或更改大量属性来修改控件以匹配UI规范,可以使用HTML和CSS标记的知识为桌面应用程序构建布局。

    主要功能包括:

    • 在HTML标记中指定数据绑定表达式,以显示来自底层数据源的值。
    • 使用CSS创建响应式UI——当用户鼠标指针悬停在或单击特定元素上时添加效果。
    • 向UI添加外部控件(例如,文本框)。
    • 处理控件事件来响应UI元素鼠标动作。
    • 启用DirectX硬件加速来获得更好的性能。

    HTML-CSS标记

    支持HTML和CSS的控件和组件从模板呈现它们的UI,控件模板的HTML标记指定控件的内容(UI元素),而模板的CSS代码指定应用于UI元素的样式、显示和布局设置。

    使用控件的HtmlTemplate属性来指定模板,在设计时,开发人员可以在HTML Template Editor(HTML模板编辑器)中创建模板。

    该编辑器支持语法高亮显示、智能感知(一种代码完成辅助工具)和预览面板,预览面板允许开发人员检查可视元素——将鼠标悬停在元素上时定位的HTML标记。

    示例

    下面的示例演示了一个HtmlContentControl从指定的HTML-CSS模板呈现一个UI,该控件被绑定到Employee对象的列表。模板的HTML代码包含数据绑定表达式,用于显示来自数据源的值。

    C#

    1. public class Employee {
    2. public string DisplayName { get; set; }
    3. public string FullName { get; set; }
    4. public SvgImage Photo { get; set; }
    5. }
    6. //...
    7. Employee emp = new Employee();
    8. emp.DisplayName = "Leah Test Coordinator";
    9. emp.FullName = "Leah Simpson";
    10. SvgImageCollection imageCollection = new SvgImageCollection();
    11. imageCollection.Add("photo", "image://svgimages/icon builder/business_businesswoman.svg");
    12. emp.Photo = imageCollection["photo"];
    13. List list = new List();
    14. list.Add(emp);
    15. htmlContentControl1.DataContext = list;
    16. //...
    17. void OnButtonClick(object sender, DxHtmlElementMouseEventArgs args) {
    18. if(args.ElementId == "uploadBtn") {
    19. //...
    20. }
    21. if (args.ElementId == "removeBtn") {
    22. //...
    23. }
    24. XtraMessageBox.Show("Button " + args.ElementId + " clicked");
    25. }

    VB.NET

    1. Public Class Employee
    2. Public Property DisplayName() As String
    3. Public Property FullName() As String
    4. Public Property Photo() As SvgImage
    5. End Class
    6. '...
    7. Dim emp As Employee = New Employee()
    8. emp.DisplayName = "Leah Test Coordinator"
    9. emp.FullName = "Leah Simpson"
    10. Dim imageCollection As SvgImageCollection = New SvgImageCollection()
    11. imageCollection.Add("photo", "image://svgimages/icon builder/business_businesswoman.svg")
    12. emp.Photo = imageCollection("photo")
    13. Dim list As New List(Of Employee)()
    14. list.Add(emp)
    15. htmlContentControl1.DataContext = list
    16. '...
    17. Private Sub OnButtonClick(ByVal sender As Object, ByVal args As DxHtmlElementMouseEventArgs)
    18. If args.ElementId = "uploadBtn" Then
    19. '...
    20. End If
    21. If args.ElementId = "removeBtn" Then
    22. '...
    23. End If
    24. XtraMessageBox.Show("Button " & args.ElementId & " clicked")
    25. End Sub

    HTML

    1. <div class="container" id="container">
    2. <div class="avatarContainer">
    3. <img src="${Photo}" class="avatar">
    4. <div id="uploadBtn" onclick="OnButtonClick" class="centered button">Uploaddiv>
    5. <div id="removeBtn" onclick="OnButtonClick" class="centered button">Removediv>
    6. div>
    7. <div class="separator">div>
    8. <div class="avatarContainer ">
    9. <div class="field-container">
    10. <div class="field-header">
    11. <b>Display nameb><b class="hint">Visible to other membersb>
    12. div>
    13. <p>${DisplayName}p>
    14. div>
    15. <div class="field-container with-left-margin">
    16. <div class="field-header">
    17. <b>Full nameb><b class="hint">Not visible to other membersb>
    18. div>
    19. <p>${FullName}p>
    20. div>
    21. div>
    22. div>

    CSS

    1. .container{
    2. background-color:@Window;
    3. display:flex;
    4. flex-direction: column;
    5. justify-content: space-between;
    6. border-radius: 20px;
    7. padding: 0px 30px 16px 30px;
    8. border-style:solid;
    9. border-width:1px;
    10. border-color:@HideSelection;
    11. color: @ControlText;
    12. }
    13. .avatarContainer{
    14. display: flex;
    15. margin-top:16px;
    16. margin-bottom:16px;
    17. }
    18. .avatar{
    19. width: 100px;
    20. height: 100px;
    21. border-radius:100px;
    22. border-style: solid;
    23. border-width: 1px;
    24. border-color: @HideSelection;
    25. }
    26. .field-container{
    27. display:flex;
    28. flex-direction:column;
    29. justify-content: space-between;
    30. flex-grow:1;
    31. flex-basis: 150px;
    32. padding-left:10px;
    33. padding-right:10px;
    34. }
    35. .with-left-margin{
    36. margin-left:10px;
    37. }
    38. .field-header{
    39. display:flex;
    40. justify-content: space-between;
    41. }
    42. .button{
    43. display: inline-block;
    44. padding: 10px;
    45. margin-left: 10px;
    46. color: gray;
    47. background-color: @Window;
    48. border-width: 1px;
    49. border-style: solid;
    50. border-color: @HideSelection;
    51. border-radius: 5px;
    52. text-align: center;
    53. align-self:center;
    54. width: 70px;
    55. }
    56. .hint{
    57. color: @DisabledText;
    58. font-size:7.5pt;
    59. }
    60. .button:hover {
    61. background-color: @DisabledText;
    62. color: @White;
    63. border-color: @DisabledControl;
    64. }
    65. .separator{
    66. width:100%;
    67. height:1px;
    68. background-color:@HideSelection;
    69. }

  • 相关阅读:
    JWT详解
    C++ 语言学习 day15 复习 (7)
    前三强重磅揭晓!华秋第八届硬创大赛-全国总决赛路演活动成功举办!
    雷达基础系列文章之五:雷达调制样式的功能
    【全开源】JAVA打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车源码
    MySQL---MGR保姆版
    Java · 数组 · 作为方法的参数 · 作为方法的返回值 · 二分查找 · 冒泡排序
    SpringBoot打war包并配置外部Tomcat运行
    Collection和Iterator接口
    51-57 CVPR 2024 | Cam4DOcc:自动驾驶应用中仅摄像机4D占用预测基准
  • 原文地址:https://blog.csdn.net/AABBbaby/article/details/128012346