关于winform主题IrisSkin2的编写
标签:winform blog http 文件 io 2014
第一步:首先引用IrisSkin2.dll。
第二步自定义类:
///
/// 窗体主题边界类
///
public class FormSkin : SkinEngine
{
///
/// 主题单例
///
private static FormSkin Skin;
///
/// 构造函数
///
/// 皮肤文件的位置
private FormSkin(string path)
{
_skinNames = new List();
DicSkins = new Dictionary();
GetSkins(path);
}
///
/// 主题存放位置
///
///
///
public static FormSkin CreateSkin(string path)
{
if (Skin == null)
{
Skin = new FormSkin(path);
}
return Skin;
}
#region 字段
///
/// 主题名称
///
private List _skinNames ;
#endregion
#region 属性
///
/// 主题名称
///
public string[] SkinNames { get { return _skinNames.ToArray(); } }
///
/// 主题名称与路径的字典
///
protected Dictionary DicSkins { get; set; }
#endregion
#region protected方法
///
/// 获取主题信息
///
///
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方法
///
/// 设置皮肤
///
/// 根据名称
///
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 至于这两个的细微区别我就不多说了。 然后把 主题名称和主题的存放位置存放起来 , 通过一个SetSkin来更换皮肤。
第三步:调用
//主题
Skin = LqwCourse.Base.FormSkin.CreateSkin(AppDomain.CurrentDomain.BaseDirectory);
Skin.SetSkin(Skin.SkinNames.Length > 0 ? Skin.SkinNames[0] : "");
下面是我自己弄的一个测试效果图
欢迎各位大侠指点一下。。 让我学习学习
关于winform主题IrisSkin2的编写,搜素材,soscw.com
关于winform主题IrisSkin2的编写
标签:winform blog http 文件 io 2014
原文地址:http://www.cnblogs.com/huanself/p/3848868.html
评论