所有的影响该样式所应用的对象外观(如字体,背景色,等等)的样式属性可以为两个状态之一:已设置或者未设置。最初,一个新创建的样式,其所有属性为未设置状态。它们的值可以进行查询,但是该值通过继承关系,从另一个对象或者样式获取(详见下文)。如果一个属性被设置,该设置的值将存储在样式对象自身,而将不再继承并影响自其他样式。
样式具有两个特殊的属性以支持继承:Parent 以及AmbientParent。Parent属性获取或设置一个样式,该样式将为当前的样式中尚未设值的非环境属性提供继承的值。AmbientParent属性获取或设置一个样式,该样式为当前样式中尚未设值的环境属性提供继承的值。默认情况下,一个新建的内联样式的以上两个属性均为空(在C#语言中为null,而在VB语法中的值为Nothing),而在一个样式的Chindren集合中创建的样式,其Parent属性设置为拥有该集合的样式,此时,
AmbientParent属性的值仍为空。
如果一个样式的Parent属性未指定,则非环境属性的值将从静态默认值获取(参见下表)。如果一个样式的
AmbientParent属性未指定,则环境属性的值将从应用该样式的对象的容器对象获取。
例如,如果一个RenderText对象rt包含在一个RenderArea对象ra中,那么以下规则将用作获取字体(即,一个环境样式属性),以呈现文本:
如果设置了rt.Style.Font的值,则使用该值。
否则,如果rt.Style.AmbientParent不为空,则使用rt.Style.AmbientParent.Font的值,因为字体是一个环境属性。
再者,(如果rt.Style.AmbientParent为空,默认值),则将使用包含该对象的容器对象的字体,在本示例中,该字体将会是ra.Style.Font。
在同一个例子,以下规则将用于获取RenderText对象的背景图片(一个非环境样式属性):如果设置了rt.Style.BackgroundImage,则使用该值。
否则,如果rt.Style.Parent不为空,则将使用rt.Style.Parent.BackgroundImage的值。
再者,将使用背景图像的默认值(即,没有图像)。
请注意,虽然在默认情况下,一个样式中Children集合中的样式,它们的Parent属性都指向该拥有此Children集合的对象,但是这个值可以修改。例如,在此Children集合中的一个对象的Parent可以指向同一个集合中的另一个样式。
Children集合仅仅是一个方便的方式用做对相关的样式进行分组和存储,但是不会真正的对这些样式的继承关系做出任何的限制。
样式属性和默认值下表列出了所有影响对象显示的样式属性,即那些属于环境属性的属性,并指定其默认值:
属性名称 | 环境属性 | 默认值 |
ActiveHyperlinkAttrs | Yes |
|
BackColor |
| Empty |
BackgroundImage |
| None |
BackgroundImageAlign |
| Align left/top, stretch horizontally/vertically, keep aspect ratio |
BackgroundImageName |
| None |
Borders |
| All empty |
Brush |
| None |
CharSpacing | Yes | 0 |
CharWidth | Yes | 100 |
ClientAreaOnly |
| False |
FlowAlign |
| Default flow alignment |
FlowAlignChildren |
| Near alignment |
Font | Yes | Arial, 10pt |
FontBold | Yes | False |
FontItalic | Yes | False |
FontName | Yes | Arial |
FontSize | Yes | 10 |
FontStrikeout | Yes | False |
FontUnderline | Yes | False |
GridLines |
| None |
HoverHyperlinkAttrs | Yes |
|
HyperlinkAttrs | Yes | Blue |
ImageAlign | Yes | Align left/top, stretch horizontally/vertically, keep aspect ratio |
JustifyEndOfLines | Yes | True |
JustifyLastLine | Yes | False |
LineSpacing | Yes | 100% |
|
|
|
属性名称 | 环境属性 | 默认值 |
MeasureTrailingSpaces | Yes | False |
MinOrphanLines |
| 0 |
Padding |
| All zeroes |
ShapeFillBrush |
| None |
ShapeFillColor |
| Transparent |
ShapeLine |
| Black, 0.5pt |
Spacing |
| All zeroes |
TextAlignHorz | Yes | Left |
TextAlignVert | Yes | Top |
TextAngle |
| 0 |
TextColor | Yes | Black |
TextIndent |
| 0 |
TextPosition |
| Normal |
VisitedHyperlinkAttrs | Yes | Magenta |
WordWrap | Yes | True |
复杂样式属性的子属性
样式属性以及其默认值主题中的该表格中间的一些属性包含子属性,可以单独进行设置。例如,在
BackgroundImageAlign属性具有AlignHorz,AlignVert以及其他几个子属性。除了个别的只读子属性之外(比如说字体,字体的子属性是不可变的,其单个的子属性不能被设置),其他的子属性可以被单独设置并继承。
一个字体的子属性不可改变,而每一个其子属性有一个独立的样式上的根级别的属性表示,比如说FontBold,
FontItalic,等等。这些属性可以单独设置,并遵循一般的样式继承规则。有一个细微的差别,但是不得不考虑的因素是:如果同时设置了Font属性以及这些单独的和字体相关的属性(FontBold,FontItalic,等等),则结果取决于这两个属性设置的顺序。如果先设置了Font属性,之后再改变一个字体相关的属性(比如说,FontItalic设置为True),则最后所做的改变将影响结果。如果,另一种情况,先设置了FontItalic为True,然后Font属性被指定为一个非斜体的字体,则之前对FontItalic所做的修改将丢失。
计算样式属性
在Reports for WinForms 2009 V3版本中,添加了对计算样式属性的支持。针对每一个样式属性,添加了一个匹配的字符串属性,这些属性具有相同的名称,不过添加了"Expr"后缀作为属性名。例如,BackColorExpr以及TextColorExpr 属性分别匹配 BackColor以及TextColor属性,依此类推,其他属性也是如此。
复杂属性类型的子属性(比如说ImageAlign,Borders,等等)也有匹配表达式的子属性。例如,在LeftExpr属性匹配Left属性等等。样式表达式
以下对象可以在样式表达式中使用:
RenderObject:当前样式的ownerrender对象。
Document:当前的文档。
Page(以及其他页面相关的对象,比如说PageNo):包含该对象的页面(参见下面的注释)。
RenderFragment:当前片段。
Aggregates.
Fields,DataBinding:参考当前数据源;如果样式的owner处在一个表格内,且行和列同时指定了数据源,则将参考列的数据源定义。
RowNumber:在相关的数据源的行号。
ColFields,ColDataBinding:只有在样式应用于一个表格内可访问,引用列定义的数据源。
RowFields,RowDataBinding:只有在样式应用与一个表格内可访问,引用行定义的数据源。
转换类型
只有在一个计算样式属性的值设置给用作呈现对象的真实值时,将按照以下规则转换类型:
如果目标属性类型是数值型(int,float,等等),则计算出来的值将做必要的转换,转换为需要的数值类型
(从字符串转换,取整,等等)。
如果目标属性是一个单位(例如,间距),且表达式返回一个数值,则单位将使用以下构造器进行创建:
newUnit(Document.DefaultUnitType, value)。如果表达式返回一个字符串,该字符串将使用正常的单位解析规则进行解析。
在所有其他情况下,将使用TypeConverter尝试转换值为目标类型。
最后,如果表达返回空,将使用父样式的值,就像该属性从未在当前样式上指定过一样(类似未指定样式属性的默认行为)。
页面引用
以下是一个页面引用相关的重要注意事项。样式的表达可引用当前页面,例如:
ro.Style.BackColor = "iif(PageCount < 3, Color.Red, Color.Blue)";
这样的表达式不能在文件生成时计算。因此,在文档生成过程中,这样的表达是被忽视的(使用默认值),并且之后再包含该对象的实际页面即将被呈现时(比如说,在预览中绘制,导出,等等)才会去真正计算这些值。
作为结果,过分依赖分页样式以及将影响文档布局的样式表达式可能导致不可预期以及不期望的结果。例如,如果下面的表达式用于字体大小:
ro.Style.FontSize = "iif(PageCount < 3, 20, 30)";
在文档生成过程中上面的表达式将被忽略,做为结果,呈现的文本相对于计算对象的尺寸可能过大而被剪裁。
段落对象样式
RenderParagraph (和其他的render对象一样)具有Style属性,可以用作设置样式属性并应用到整个段落。个别段落对象(ParagraphText 和 ParagraphImage)也具有样式,但设置属性之后被应用到段落对象的样式属性仅限于以下:
BackColor
Brush (仅当其为一个单色画刷)
Font (相关的属性,如FontBold,等等。)
HoverHyperlinkAttrs
TextColor
TextPosition
VisitedHyperlinkAttrs