• 手把手教你用DevExpress WinForm添加和自定义工具栏皮肤选择器


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

    您可以向工具栏(BarManager)和Ribbon Control添加skin selectors(皮肤选择器),来允许用户在运行时选择皮肤。

    获取DevExpress 最新版下载

    向工具栏添加Skin Selector(皮肤选择器)

    在设计时,单击工具栏中的[Add]按钮,并从skin Item子菜单中选择一个皮肤选择器。

    以下皮肤选择器可用:

    • Skin Menu (SkinBarSubItem) — 以菜单的形式显示皮肤名称。

    • Skin List (SkinDropDownButtonItem) — 显示皮肤名称作为一个可滚动的列表,带有一个内置的搜索框,来根据名称定位皮肤。

    • Skin Palette List (SkinPaletteDropDownButtonItem) — 显示当前选定矢量皮肤的调色板。

    您可以在代码中修改皮肤选择器,为此使用皮肤选择器的BarCustomContainerItem.ItemLinks集合。

    当您创建皮肤选择器(SkinBarSubItem, SkinDropDownButtonItem, skinpaletdropdownbuttonitem, SkinRibbonGalleryBarItem和SkinPaletteRibbonGalleryBarItem)并将它们添加到代码中的工具栏或Ribbon控件时,确保调用了皮肤选择器的Initialize方法。

    C#

    1. SkinBarSubItem skinBarSubItem1 = new SkinBarSubItem();
    2. barManager1.Items.Add(skinBarSubItem1);
    3. bar1.ItemLinks.Add(skinBarSubItem1);
    4. skinBarSubItem1.Initialize();

    VB.NET

    1. Dim skinBarSubItem1 As New SkinBarSubItem()
    2. BarManager1.Items.Add(skinBarSubItem1)
    3. Bar1.ItemLinks.Add(skinBarSubItem1)
    4. skinBarSubItem1.Initialize()

    隐藏皮肤和皮肤组

    你可以在皮肤选择器中隐藏单独的项目,如下所示:

    1. 创建要排除的皮肤名称的字符串数组,您可以使用全名(例如,“Office 2016 Colorful”)或部分名称(例如,“2007”)。

    C#

    string[] skinsToHide = { "Seven Classic", "DevExpress Style", "Dark", "2010", "2007", "Sharp" };

    VB.NET

    Dim skinsToHide() As String = { "Seven Classic", "DevExpress Style", "Dark", "2010", "2007", "Sharp" }

    2. 创建一个自定义方法(HideSkins),遍历皮肤选择器的项,并删除与数组中值匹配的皮肤。

    C#

    1. private void HideSkins(string[] skinsToHide) {
    2. for(var i = 0; i < skinBarSubItem1.ItemLinks.Count; i++) {
    3. //Check regular button items
    4. if(skinBarSubItem1.ItemLinks[i] is BarButtonItemLink) {
    5. var item = skinBarSubItem1.ItemLinks[i];
    6. foreach(var skin in skinsToHide) {
    7. if(item.Caption.Contains(skin)) {
    8. item.Visible = false;
    9. }
    10. }
    11. }
    12. //Check buttons nested in the "Bonus Skins" sub-menu
    13. if(skinBarSubItem1.ItemLinks[i] is BarSubItemLink && skinBarSubItem1.ItemLinks[i].Caption == "Bonus Skins") {
    14. BarSubItemLink group = (BarSubItemLink)skinBarSubItem1.ItemLinks[i];
    15. for(var j = 0; j < group.Item.ItemLinks.Count; j++) {
    16. var item = group.Item.ItemLinks[j];
    17. foreach(var skin in skinsToHide) {
    18. if(item.Caption.Contains(skin)) {
    19. item.Visible = false;
    20. }
    21. }
    22. }
    23. }
    24. //Hide theme skins
    25. if(skinBarSubItem1.ItemLinks[i] is BarSubItemLink && skinBarSubItem1.ItemLinks[i].Caption == "Theme Skins") {
    26. skinBarSubItem1.ItemLinks[i].Visible = false;
    27. }
    28. }
    29. }

    VB.NET

    1. Private Sub HideSkins(ByVal skinsToHide() As String)
    2. For i = 0 To skinBarSubItem1.ItemLinks.Count - 1
    3. 'Check Items
    4. If TypeOf skinBarSubItem1.ItemLinks(i) Is BarButtonItemLink Then
    5. Dim item = skinBarSubItem1.ItemLinks(i)
    6. For Each skin In skinsToHide
    7. If item.Caption.Contains(skin) Then
    8. item.Visible = False
    9. End If
    10. Next skin
    11. End If
    12. 'Check bonus skins
    13. If TypeOf skinBarSubItem1.ItemLinks(i) Is BarSubItemLink AndAlso skinBarSubItem1.ItemLinks(i).Caption <> "Theme Skins" Then
    14. Dim group As BarSubItemLink = CType(skinBarSubItem1.ItemLinks(i), BarSubItemLink)
    15. For j = 0 To group.Item.ItemLinks.Count - 1
    16. Dim item = group.Item.ItemLinks(j)
    17. For Each skin In skinsToHide
    18. If item.Caption.Contains(skin) Then
    19. item.Visible = False
    20. End If
    21. Next skin
    22. Next j
    23. End If
    24. 'Hide theme skins
    25. If TypeOf skinBarSubItem1.ItemLinks(i) Is BarSubItemLink AndAlso skinBarSubItem1.ItemLinks(i).Caption = "Theme Skins" Then
    26. skinBarSubItem1.ItemLinks(i).Visible = False
    27. End If
    28. Next i
    29. End Sub

    3. 从Load事件处理程序调用HideSkins方法。

    C#

    1. void ucBar_Load(object sender, EventArgs e) {
    2. HideSkins(skinsToHide);
    3. }

    VB.NET

    1. Private Sub ucBar_Load(ByVal sender As Object, ByVal e As EventArgs)
    2. HideSkins(skinsToHide)
    3. End Sub

    更改标题和图标

    遍历皮肤选择器的ItemLinks集合以更改项标题或符号。

    C#

    1. void ucBar_Load(object sender, EventArgs e) {
    2. RenameSkins();
    3. }
    4. private void RenameSkins() {
    5. for(var i = 0; i < skinBarSubItem1.ItemLinks.Count; i++) {
    6. if(skinBarSubItem1.ItemLinks[i].Caption == "DevExpress Style") {
    7. BarButtonItem parentItem = (BarButtonItem)skinBarSubItem1.ItemLinks[i].Item;
    8. parentItem.Caption = "Default Skin";
    9. parentItem.ImageUri.Uri = "Apply";
    10. }
    11. }
    12. }

    VB.NET

    1. Private Sub ucBar_Load(ByVal sender As Object, ByVal e As EventArgs)
    2. RenameSkins()
    3. End Sub
    4. Private Sub RenameSkins()
    5. For i = 0 To skinBarSubItem1.ItemLinks.Count - 1
    6. If skinBarSubItem1.ItemLinks(i).Caption = "DevExpress Style" Then
    7. Dim parentItem As BarButtonItem = CType(skinBarSubItem1.ItemLinks(i).Item, BarButtonItem)
    8. parentItem.Caption = "Default Skin"
    9. parentItem.ImageUri.Uri = "Apply"
    10. End If
    11. Next i
    12. End Sub

    下图显示了结果:

    使用定位器更改皮肤标题

    还可以使用Localizer对象重命名皮肤项。

  • 相关阅读:
    红黑树
    递归下降语法分析程序设计与实现
    搭建一个家用的媒体服务器(支持电影、音乐和电子书)
    从零开始搭建Prometheus+grafana服务器&组件监控系统
    大厂面试-美团高频考察算法之重排链表
    ubuntu配置ffmpeg环境
    树的基本概念
    css3对文字标签不同宽,不同高使用瀑布流对齐显示
    基于双向长短期记忆 BiLSTM 实现股票单变量时间序列预测(PyTorch版)
    【笔试】2022/9/3 京东开发岗编程满分
  • 原文地址:https://blog.csdn.net/AABBbaby/article/details/127663688