第一步:首先引用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] : "");

下面是我自己弄的一个测试效果图

欢迎各位大侠指点一下。。 让我学习学习

最新文章

  1. Swift—调用系统相册和相机
  2. soft-margin SVM
  3. android防止内存溢出浅析
  4. Symbols
  5. 通过gulp为requireJs引入的模块添加版本号
  6. Java数组的12个常用方法
  7. WOFF mime类型
  8. Python学习(5)——内置函数
  9. JAVA Hashmap不能用基本的数据类型
  10. 解同余式ax ≡ c(mod m)
  11. nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。
  12. 笔记之Cyclone IV第一卷第三章器件中的存储器模块
  13. WebApi用户登录验证及服务器端用户状态存取
  14. java解压多层目录中多个压缩文件和处理压缩文件中有内层目录的情况
  15. Kafka安装及开启SASL_PLAINTEXT认证(用户名和密码认证)
  16. MySQL查看、创建和删除索引的方法
  17. 蒲公英: 一个提供App 存储、分发、Bug管理的网站
  18. 装饰器python
  19. Scrum立会报告+燃尽图(十二月九日总第四十次):视频剪辑与用户反馈
  20. 使用ECharts实现数据图表分析

热门文章

  1. Android Support V7 包中 ActionBar的使用
  2. Java中 int和Integer的区别+包装类
  3. Memcached使用手册
  4. phpCMS V9 自定义添加 全局变量{SKIN_PATH}方法
  5. d010: 分离自然数
  6. 转:struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
  7. [LeetCode 109] - 将已排序链表转换为二叉搜索树 (Convert Sorted List to Binary Search Tree)
  8. 对libssh的golang 封装 ssh2go
  9. vim 中按键映射问题
  10. HDU_2047——EOF字符串排序排列问题,递推