第一步:首先引用IrisSkin2.dll。
第二步自定义类:
/// <summary> /// 窗体主题边界类 /// </summary> public class FormSkin : SkinEngine { /// <summary> /// 主题单例 /// </summary> private static FormSkin Skin; /// <summary> /// 构造函数 /// </summary> /// <param name="path">皮肤文件的位置</param> private FormSkin(string path) { _skinNames = new List<string>(); DicSkins = new Dictionary<string, string>(); GetSkins(path); } /// <summary> /// 主题存放位置 /// </summary> /// <param name="path"></param> /// <returns></returns> public static FormSkin CreateSkin(string path) { if (Skin == null) { Skin = new FormSkin(path); } return Skin; } #region 字段 /// <summary> /// 主题名称 /// </summary> private List<string> _skinNames ; #endregion #region 属性 /// <summary> /// 主题名称 /// </summary> public string[] SkinNames { get { return _skinNames.ToArray(); } } /// <summary> /// 主题名称与路径的字典 /// </summary> protected Dictionary<string, string> DicSkins { get; set; } #endregion #region protected方法 /// <summary> /// 获取主题信息 /// </summary> /// <param name="path"></param> protected virtual void GetSkins(string path) { foreach (string file in Directory.GetFiles(path, "*.ssk", SearchOption.AllDirectories)) { int index = file.LastIndexOf(@"\"); var _name = file.Substring(index + 1, file.Length - index - 5).Trim(); if (!_skinNames.Contains(_name)) _skinNames.Add(_name); if (!DicSkins.Keys.Contains(_name)) DicSkins.Add(_name, file); } } #endregion #region public方法 /// <summary> /// 设置皮肤 /// </summary> /// <param name="key">根据名称</param> /// <returns></returns> public bool SetSkin(string key) { if (DicSkins.Keys.Contains(key)) { var file = DicSkins[key]; if (File.Exists(file)) { Skin.SkinFile = file; return true; } } return false; } #endregion }
这个是我自己写的。不一定很好,你们也可以自定义,我是属于菜鸟级别的。哈哈。用了一个单例。 其实主要也就是这样一个类
主要原理 其实是很简单的:首先是创建单列的时候需要提供一个位置,然后根据这个位置去查找*.ssk文件也就是皮肤主题文件 ,然后把 主题名称用一个只读集合公开出来,注意我用的是String[]数组 而不是List<string> 至于这两个的细微区别我就不多说了。 然后把 主题名称和主题的存放位置存放起来 , 通过一个SetSkin来更换皮肤。
第三步:调用
//主题 Skin = LqwCourse.Base.FormSkin.CreateSkin(AppDomain.CurrentDomain.BaseDirectory); Skin.SetSkin(Skin.SkinNames.Length > 0 ? Skin.SkinNames[0] : "");
下面是我自己弄的一个测试效果图
欢迎各位大侠指点一下。。 让我学习学习