Look And Feel被类UserLookAndFeel类实现,每个支持该机理的控件,都有一项属性叫做LookAndFeel,通常,所有的控件都是使用该类的一个静态缺省对象。
例如在窗体中添加一个简单按钮DevExpress.XtraEditors.SimpleButton simpleButton1,该按钮就会有LookAndFeel属性:
![DevExpress 中的LookAndFeel机理 - Castor - 趁年轻,多折腾~~](http://img4.ph.126.net/puj4QRrBRZu4lyoi8u4iWw==/1092122909654322114.jpg)
你要特别注意这个LookAndFeel下的UseDefaultLookAndFeel和 UseWindowsXPTheme,这两个属性能够否决所有其他的设置。
如果UseDefaultLookAndFeel被设置为True,则所有其他的设置将会被无视,将会采用默认的设置,那么默认的设置是什么呢?默认的设置又是可以定制的。这个看起来有点奇怪,其实慢慢看就会明白。
在工具箱中Component下拖动一个DefaultLookAndFeel控件(DevExpress.LookAndFeel.DefaultLookAndFeel defaultLookAndFeel1)
后,设置其属性,这个属性就会作为全局的默认属性,程序员就可以自行定制默认的LookAndFeel了。
这个时候你试试设置UseDefaultLookAndFeel会发现只能改为True(因为没有上级的LookAndFeel供其参考了),同时把UseWindowsXPTheme设置为False,然后修改一下SkinName,例如为Lilian,会发现简单按钮的外观发生了改变。在往其中添加控件,你会发现会自动使用Lilian外观:
![DevExpress 中的LookAndFeel机理 - Castor - 趁年轻,多折腾~~](http://img4.ph.126.net/RAp6zLlWSUlfrc1rAo2Ysg==/2658249680072409904.jpg)
现在,一旦我修改了defaultLookAndFeel1的SkinName,这四个控件的外观都会按统一的样式发生变化,有趣的是,这一改变是可以在运行时发生的,例如我们给simpleButton1添加事件:
private void simpleButton1_Click(object sender, EventArgs e)
{
this.defaultLookAndFeel1.LookAndFeel.SkinName = "iMaginary";
}
在运行过程就可以修改程序的外观了。
如果UseDefaultLookAndFeel被设置为False,控件的外观就会受到UseWindowsXPTheme的影响,如果说UseDefaultLookAndFeel是总统的话,则UseWindowsXPTheme就是副总统了。该属性决定了控件的外观是否受到XP样式的影响,当副总统说True的时候,并且系统恰好使用了XP主题,则UserLookAndFeel.Style的值就会被无视,而采用XP的主题。
修改简单按钮的的点击事件,试试分别在副总统说True和False的时候运行该代码:
private void simpleButton1_Click(object sender, EventArgs e)
{
this.defaultLookAndFeel1.LookAndFeel.Style = LookAndFeelStyle.Office2003;
}
你就会知道副总统还是管点事的。
如果真想修改Style,比较好的建议是在运行时修改其值,例如:
private void simpleButton1_Click(object sender, EventArgs e)
{
this.defaultLookAndFeel1.LookAndFeel.UseWindowsXPTheme = false;
this.defaultLookAndFeel1.LookAndFeel.Style = LookAndFeelStyle.Office2003;//要使用命名空间using DevExpress.LookAndFeel;
}
这样就可以不管控件的默认值了。
最后说说UserLookAndFeel.Style,它接收或者返回一个 LookAndFeelStyle的枚举值,其中有Flat、Office2003、UltraFlat等,具体可查看帮助文档。
呃,还忘记了SkinName,前面可以发现,该属性接收或者返回的是字符串,其实可行的字符串也就那几种吧,即Caramel、Money Twins、Lilian、iMaginary、DevExpress Dark Style、Black、Blue,如果设置其他值,会有什么后果呢?你自己试试吧