1
yhj
2024-07-24 5e5d945e91568b973faa27d8ab0bcef99fc4a6c5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#region
 
using CSFrameworkV5.Business;
using CSFrameworkV5.Core;
using DevExpress.LookAndFeel;
using DevExpress.Skins;
using DevExpress.XtraBars;
 
#endregion
 
namespace CSFrameworkV5.Library.CommonClass
{
    /// <summary>
    ///     设置皮肤工具. Last Modified: 2018-10-06
    /// </summary>
    public class SkinTools
    {
        //当前皮肤列表组件(对应frmMain界面的皮肤列表)
        private static BarLinkContainerItem _CurrentRibbonSkinList;
 
        /// <summary>
        ///     获取系统当前皮肤名称
        /// </summary>
        /// <returns></returns>
        public static string GetCurrentSkinName()
        {
            var defName = UserLookAndFeel.Default.SkinName;
 
            if (string.IsNullOrWhiteSpace(SystemSettings.Current.SkinName))
                return defName;
 
            return SystemSettings.Current.SkinName;
        }
 
        /// <summary>
        ///     /重新加载皮肤列表
        /// </summary>
        /// <param name="owner">当前皮肤列表组件</param>
        /// <param name="checkCurrent">勾选当前皮肤</param>
        public static void LoadSkinList(BarLinkContainerItem owner,
            bool checkCurrent = true)
        {
            _CurrentRibbonSkinList = owner;
 
            //读取预设的皮肤名称
            var currentName = GetCurrentSkinName();
 
            //重新加载皮肤列表
            owner.ItemLinks.Clear();
            foreach (SkinContainer skin in SkinManager.Default.Skins)
            {
                var item = new BarCheckItem(owner.Manager);
                item.Caption = skin.SkinName;
                item.Checked =
                    checkCurrent && skin.SkinName == currentName; //打勾
                item.ItemClick += OnSetSkinClick;
                owner.ItemLinks.Add(item);
            }
        }
 
        /// <summary>
        ///     设置皮肤
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private static void OnSetSkinClick(object sender, ItemClickEventArgs e)
        {
            SetSkin(e.Item.Caption);
 
            if (_CurrentRibbonSkinList != null)
                foreach (BarItemLink item in _CurrentRibbonSkinList.ItemLinks)
                    if (item.Item is BarCheckItem)
                        (item.Item as BarCheckItem).Checked = false;
 
            (e.Item as BarCheckItem).Checked = true;
        }
 
        /// <summary>
        ///     设置皮肤,并且保存配置。
        /// </summary>
        /// <param name="skinName"></param>
        public static void SetSkin(string skinName)
        {
            UserLookAndFeel.Default.SetSkinStyle(skinName); //设置主题样式
 
            //保存到数据库
            CommonData.PostUserSettings(Loginer.CurrentUser, "SkinName",
                skinName);
 
            //同步更新全局变量
            SystemSettings.Current.SkinName = skinName;
 
            //保存到ini
            UserConfig.Current.SkinName = skinName;
            UserConfig.Current.Save();
        }
 
        /// <summary>
        ///     给Gallery组件当前皮肤名称设置焦点(选择状态)
        /// </summary>
        /// <param name="ribbonGallary">Gallery组件</param>
        /// <param name="skinName">皮肤名称</param>
        public static void SetSkinGalleryCheck(
            RibbonGalleryBarItem ribbonGallary, string skinName)
        {
            var list = ribbonGallary.Gallery.GetAllItems();
            if (list != null)
            {
                var item =
                    list.Find(e => e.Tag.ToStringEx() == skinName); //找出当前皮肤
                if (item != null)
                    ribbonGallary.Gallery.SetItemCheck(item, true); //设置焦点(选择状态)
            }
        }
 
        public static void SetSkinItemCheck(string skinName)
        {
            if (_CurrentRibbonSkinList == null) return;
 
            foreach (BarCheckItemLink item in _CurrentRibbonSkinList.ItemLinks)
                (item.Item as BarCheckItem).Checked = item.Caption == skinName;
        }
    }
}