全部 Developer Express .NET Windows 窗体控件(XtraGrid、 XtraBars、 XtraTreeList 等)都提供了设计时刻和运行时刻工具, 用于定制可视化元素的外观。 包括修改属性, 诸如背景色和前景色、背景图片、字体设置等等——这也是本文档的主题。
本文档概述了外观机制(appearance mechanism)。 部分机制是以集中的方式为一组控件定制外观。 你可以对派生于 BaseControl 类的编辑器集中定制外观。 请参阅 样式控制器(Style Controller) 来学习更多内容。
外观和外观设置
外观设置通过 AppearanceObject 和 AppearanceObjectEx 类进行封装。 它们的属性指定了背景色和前景色、渐变背景、字体、画笔、画刷和其他用于绘制特定元素的样式特征。 下表列出了这些由外观对象( AppearanceObject 对象的属性) 提供的设置。
属性 | 说明 |
---|---|
AppearanceObject.BackColor | 如果 AppearanceObject.BackColor2 属性值为 Color.Empty,则指定元素的背景色。 否则,它指定渐变的开始颜色。 |
AppearanceObject.BackColor2 | 指定背景的渐变结束颜色。 |
AppearanceObject.BorderColor | 指定元素的边框色。 |
AppearanceObject.GradientMode | 指定背景的渐变方向。 |
AppearanceObject.ForeColor | 指定元素的前景色(文本颜色)。 |
AppearanceObject.Font | 指定用于绘制元素文本的字体。 |
AppearanceObject.Image | 指定元素的背景图片。 |
AppearanceObject.Options | 用于访问外观对象的选项,这些选项指定了被继承的外观设置。 |
AppearanceObject.TextOptions | 用于访问外观对象的选项,这些选项指定了外观对象的文本设置(横向和纵向对齐方式、修整等)。 |
下面的插图举例说明了在 XtraGrid 控件中某张卡片的这些设置。 一张卡片由多个可视化元素(卡片标题、字段标题、字段取值等)组成,并且可以通过它自身的 AppearanceObject 对象进行定制。
外观选项(Appearance Options)
AppearanceObject 类公开了 AppearanceObject.Options 属性,从而提供了对确定外观设置是否被用于绘制某个元素的 Boolean 选项的访问。
选项 | 说明 |
---|---|
AppearanceOptions.UseBackColor | 获取或设置 AppearanceObject.BackColor 属性值是否被使用。 |
AppearanceOptions.UseBorderColor | 获取或设置 AppearanceOptions.UseBorderColor 属性值是否被使用。 |
AppearanceOptions.UseFont | 获取或设置 AppearanceOptions.UseFont 属性值是否被使用。 |
AppearanceOptions.UseForeColor | 获取或设置 AppearanceOptions.UseForeColor 属性值是否被使用。 |
AppearanceOptions.UseImage | 获取或设置 AppearanceOptions.UseImage 属性值是否被使用。 |
如果某个选项被禁用,那么它相应的属性不被使用。例如,如果 AppearanceOptions.UseBackColor 选项被设置为 false, 那么 AppearanceObject.BackColor 属性不被使用。在这种情况下,此元素的背景色通过控件的 外观与感觉 设置来指定。 要获得实际用于绘制此控件元素的外观设置,则使用控件的 PaintAppearance 属性。
一旦某个控件被拖放到窗体上,它的外观属性会被设置为默认值,并且相应的外观选项被禁用。 此控件被依照它的外观与感觉(look and feel)和默认的外观设置来绘制。 在外观属性的默认值被改变后,它相应的选项被自动激活。 或者设置此属性为默认值时,则禁用该选项。
例如, 缺省时 BackColor 属性被设置为 Color.Empty 值。 它的 UseBackColor 选项被设置为 false。 一旦 BackColor 属性值被改变,那么 UseBackColor 选项被自动设置为 true。 若把 BackColor 属性重置为 Color.Empty 值,则会设置此选项为 false。 下面以插图来说明:
在某些场合中,用于绘制那些可视化元素——诸如列标头、展开按钮等——的某些外观(例如背景色)被忽略,而不管相应选项的状态如何。 当控件被以 Office2003 或 WindowsXP 样式绘制时,这种情况会出现。
外观使用
通常每个控件都有多个可视化元素。 通常这些元素的 Appearance 对象被组合到某个单独的对象(BaseAppearanceCollection 的子类)。 例如, 在 XtraGrid 控件中的每个视图都有一个 BaseView.Appearance 属性,它为所有视图元素——诸如列标头、按钮、单元格、页脚等——组合了 Appearance 对象。 下面的插图展示了一个网格视图的属性窗口,在其中显示了 Appearance 对象:
缺省时,由控件提供的 Appearance 对象指定了控件元素应该如何被绘制。 但是这些设置可以被个别元素覆盖,因为它们比控件元素有更高的优先级。
例如,在缺省时,XtraGrid 控件中所有的列标头都使用由 GridViewAppearances.HeaderPanel 属性提供的外观设置进行绘制。 但是,通过使用某个列(column)的 GridColumn.AppearanceHeader 属性,可以越过这些设置,并为这个列标头提供一幅新的外观,而其他的列标头将使用默认的设置进行绘制。 因此, GridColumn.AppearanceHeader 的设置比 GridViewAppearances.HeaderPanel 的设置有更高的优先级。
下面的插图展示了在 XtraGrid 控件中, Contact Name 列标头使用该列的外观设置绘制,而其他列标头使用了默认的外观设置:
通过 GridView.CustomDrawColumnHeader 事件来定制列标头的外观设置也是可行的。 通过此事件提供的 Appearance 对象将有最高的优先级。
外观优先级
在某个控件中的单一元素的外观,可以使用多个有不同优先级的外观对象来指定。 如果有较高优先级的对象的外观设置没有使用(它们相应的外观选项,例如 UseBackColor、UseForeColor,已被禁用), 那么有较低优先级的某个对象的外观设置只被用来绘制一个元素。
例如,在 XtraTreeList 控件中,缺省时用于绘制某个单元格的外观层级如下图所示:
特殊的外观对象(AppearanceObjectEx 实例) 提供了 AppearanceOptionsEx.HighPriority 选项,此选项允许将它们的外观设置指定为更高的优先级。 目前,只有列(column, 在 XtraTreeList、XtraGrid 和 XtraVerticalGrid 中), 以及通过 AppearanceObjectEx 对象呈现的样式条件(style conditions, 在 XtraGrid 中), 提供了外观设置。
下面的插图展示了在 XtraTreeList 控件中,当 HighPriority 选项被应用于某列(column)时,所确定的某个节点单元格的外观与感觉(look and feel)的外观层级。 从该插图中你可以发现,用来绘制从属单元格的列的外观设置,比用来绘制获得焦点的节点和获得焦点的单元格的外观设置有更高的优先级。
打印外观
DevExpress .NET 控件,如 XtraGrid 和 XtraTreeList,都支持打印功能。这些控件公开了 AppearancePrint 属性,它提供了控件被打印时可用来绘制控件的外观设置。 要使用这些设置,则用于确定在打印控件时是否使用打印外观来绘制的选项必须被激活。 例如,当打印 XtraGrid 控件时,如果要使用打印外观来绘制网格视图,则把 GridOptionsPrint.UsePrintStyles 属性设置为 true。 否则, 如果该属性被设置为 false, 那么该网格视图将按照在窗体中的显示进行打印。
保存和恢复外观
通过使用下表列出的方法,用于绘制 DevExpress .NET 控件的外观设置可以被保存到系统注册表、XML 文件中,或者写入到流中。
方法 | 说明 |
---|---|
BaseAppearanceCollection.SaveLayoutToRegistry | 将外观设置存储到指定的系统注册表路径中。 |
BaseAppearanceCollection.SaveLayoutToStream | 将外观设置存储到指定的流中。 |
BaseAppearanceCollection.SaveLayoutToXml | 将外观设置存储到指定的 XML 文件中。 |
一旦被保存,外观设置就可以被应用到任何其他控件上。 这就允许您只需要定制该控件的外观一次, 然后把所保存的设置应用到其他应用程序中的其他控件上。 下表列出了那些用来恢复已存储外观设置的方法:
方法 | 说明 |
---|---|
BaseAppearanceCollection.RestoreLayoutFromRegistry | 恢复被存储在指定系统注册表路径中的外观设置。 |
BaseAppearanceCollection.RestoreLayoutFromStream | 从指定的流中恢复外观设置。 |
BaseAppearanceCollection.RestoreLayoutFromXml | 恢复被存储在指定 XML 文件中的外观设置。 |
下列示例代码展示了如何将用于绘制 XtraGrid 元素的设置写入 XML 文件, 以及从 XML 文件中读取这些设置。
C# | 复制代码 |
---|---|
string fileName = "C:\\appearanceLayout.xml"; gridControl1.MainView.Appearance.SaveLayoutToXml(fileName); // ... gridControl1.MainView.Appearance.RestoreLayoutFromXml(fileName); |
Visual Basic | 复制代码 |
---|---|
Dim fileName As String = "C:\appearanceLayout.xml" GridControl1.MainView.Appearance.SaveLayoutToXml(fileName) ' ... GridControl1.MainView.Appearance.RestoreLayoutFromXml(fileName) |