码迷,mamicode.com
首页 > Windows程序 > 详细

关于winform主题IrisSkin2的编写

时间:2014-07-22 22:57:54      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:winform   blog   http   文件   io   2014   

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

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

bubuko.com,布布扣

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

关于winform主题IrisSkin2的编写,布布扣,bubuko.com

关于winform主题IrisSkin2的编写

标签:winform   blog   http   文件   io   2014   

原文地址:http://www.cnblogs.com/huanself/p/3848868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!