更换Winform 皮肤(上)使用现有皮肤

偶然的想法,遇到了Winform更改Winform皮肤的问题。

WPF没有这个问题,WPF的控件都是没有外形的,完全可以根据自己需要自由发挥,可以通过直观的编码实现各种绚丽的界面效果,网上也有很多现有的style、template供参考。

相比WPF,Winform换肤就没有那么幸运了。实现起来相对比较麻烦。

Baidu+Google,发现解决Winform换肤的实现方法,基本有如下两种。

实现1.使用现有皮肤。优点:实现及其简单,基本不需要编码;但细节需要注意。缺点:不能自己定制

实现2.完全的GDI+绘制。有点:可以完全根据个人爱好制作个性化的界面。缺点:完成一个用户体验良好的皮肤,编码量和前期图片素材准备需要花费精力。

本文首先介绍实现1:使用现有皮肤的方法,后面的博文会介绍实现2.

实现1,原理是很简单的,你像是换主题一样,只需要第三方法的类库就可以实现
SkinCrafter   http://skincrafter.com/
irisskin      http://www.sunisoft.cn/irisskin/index.htm
DotNetSkin    http://www.dotnetskin.net/
还有更高级的 Infragistics NetAdvantage
所有这些第三方类库,DebugLZQ没有都去验证。只是试了下IrisSkin2.dll(下载),和SSK皮肤文件(下载),这个皮肤里面有一个展示Demo,可以查看各种皮肤对应的效果。

博客园里有几篇类似的文章,但是LZ试了一下。主要的问题是:很多文章相互参考(你懂的.......),很多根本都没有去试过,结果按着他的步骤去尝试,运行不了,存在相同的问题。无良的人啊,误人子弟!

下面step by step来实现这个Demo。

1.新建一个Winform项目,把上面的dll文件和SSK皮肤文件放入项目的bin/debug目录下。并添加这个dll文件的引用。

2.在窗体cs文件中添加如下傻瓜般的代码,如下:

namespace TaskVision_V_1_WinForm
{
    /// <summary>
    /// Winform 皮肤 Demo
    /// By DebugLZQ
    /// http://www.cnblogs.com/DebugLZQ
    /// </summary>
    public partial class Form1 : Form
    {
        Sunisoft.IrisSkin.SkinEngine se = null;
        public Form1()
        {
            InitializeComponent();
            se = new Sunisoft.IrisSkin.SkinEngine();
            se.SkinAllForm = true;//所有窗体均应用此皮肤
            se.SkinFile = "skin/WaveColor1.ssk";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
        } 
    }
}

运行如下:

中间的黑框框是LZ拖上去的DataGridView控件。

需要注意的地方是:该第三方控件要求.NET Framework 版本最高为3.5。使用VS2010或是VS2012的博友需要更改项目的目标版本。

下一篇博文将介绍自定义皮肤的方法,请期待。。。

原文地址:https://www.cnblogs.com/DebugLZQ/p/3021629.html