如何更新 Spark DataGrid 中标题部分的外观?这是一个如何设置 Spark DataGrid 的标题背景颜色、标题文本颜色、列分隔符和排序箭头指示器符号颜色的社区 wiki 帖子。
1 回答
我在网上找到了一些关于如何设置 Spark DataGrid 标头样式的示例,但不是按照我所描述的方式。所以这就是我的做法。
MXML:
<s:DataGrid />
CSS:
s|DataGrid {
symbolColor:#FF0000; /* defines the sort indicator color */
}
s|GridItemRenderer {
color:#0000FF; /* defines the header text color */
chromeColor:#00FF00; /* defines the header background color */
}
就是这样。嗯,不完全是。GridItemRenderer 使用渐变。如果您不想要这些,除了上述之外,您还必须做一些额外的工作。
第 II 部分
要删除渐变,我们必须创建两个新的皮肤类。基于 spark.skins.spark.DataGridSkin 的新数据网格皮肤和基于 spark.skins.spark.DefaultGridHeaderRenderer 的新数据网格标题皮肤。第一个皮肤扩展了 DataGridSkin。第二个皮肤是 DefaultGridHeaderRenderer 的副本。
MXML:
<s:DataGrid skinClass="view.skins.AbstractDataGridSkin"/>
抽象数据网格皮肤:
<?xml version="1.0" encoding="utf-8"?>
<spark:DataGridSkin
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
xmlns:spark="spark.skins.spark.*"
xmlns:skins="view.skins.*"
>
<fx:Declarations>
<fx:Component id="headerRenderer">
<skins:AbstractDataGridHeaderSkin />
</fx:Component>
<!--- Change the look of the column separator -->
<fx:Component id="columnSeparator">
<s:Line>
<s:stroke>
<s:SolidColorStroke color="0xA6A6A6" weight="1" caps="square"/>
</s:stroke>
</s:Line>
</fx:Component>
<!--- Defines the look of the header column separator -->
<fx:Component id="headerColumnSeparator">
<s:Line>
<s:stroke>
<s:SolidColorStroke color="0x00FF00" weight="1" caps="square" />
</s:stroke>
</s:Line>
</fx:Component>
</fx:Declarations>
</spark:DataGridSkin>
此类指向新的 DataGridHeaderSkin。
AbstractDataGridHeaderSkin:
DefaultGridHeaderRenderer 中有很多代码我不想粘贴到这个示例中,所以我只展示更改的内容。
首先删除除“第 2 层填充”之外的所有 Rect 层。接下来,将“第 2 层填充”更新为纯色填充,如下所示:
<s:GridItemRenderer minWidth="21" minHeight="21"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<!-- ...original code here.. -->
<!-- layer 2: fill -->
<!--- @private -->
<!--- Set left and right to -1 to fill out header width
<s:Rect id="fill" left="0" right="0" top="0" bottom="-1"> -->
<s:Rect id="fill" left="-1" right="-1" top="0" bottom="0">
<s:fill>
<s:SolidColor color="0xFFFFFF" color.hovered="0xBBBDBD" color.down="0xAAAAAA" alpha="1" >
</s:SolidColor>
</s:fill>
</s:Rect>
<!-- ...original code here.. -->
</s:GridItemRenderer>
我们还必须更新 sortIndicatorArrow 以从那里删除梯度。
<fx:Component id="defaultSortIndicator">
<s:Path data="M 3.5 7.0 L 0.0 0.0 L 7.0 0.0 L 3.5 7.0" implements="spark.components.gridClasses.IGridVisualElement">
<fx:Script>
<![CDATA[
import spark.components.DataGrid;
import spark.components.Grid;
/**
* @private
*/
public function prepareGridVisualElement(grid:Grid, rowIndex:int, columnIndex:int):void
{
const dataGrid:DataGrid = grid.dataGrid;
if (!dataGrid)
return;
const color:uint = dataGrid.getStyle("symbolColor");
arrowFill.color = color;
}
]]>
</fx:Script>
<s:fill>
<s:SolidColor id="arrowFill" color="0" />
</s:fill>
</s:Path>
</fx:Component>
就是这样。
注意:如果您使用镀铬颜色,它会转换标题填充背景。您可以将填充添加到排除项(更新 updateDisplayList 方法),也可以像这样设置填充 alpha 值。
<!-- layer 2: fill -->
<!--- @private -->
<!--- Set left and right to -1 to fill out header width
<s:Rect id="fill" left="0" right="0" top="0" bottom="-1"> -->
<s:Rect id="fill" left="-1" right="-1" top="0" bottom="0">
<s:fill>
<s:SolidColor alpha="1"
alpha.hovered=".95"
alpha.down="1"/>
</s:fill>
</s:Rect>
or add this to updateDisplayList and set the colors on the fill (chromeColor would not need to be set then)
var exclusions:Array = [fill, labelDisplay, sortIndicatorInstance];
在某些时候,这些常见的样式有望在 Spark DataGrid 上可用。Spark 可以更灵活地定义组件的外观和感觉,这很好,但随后将样式值硬编码到 Flex SDK 附带的默认皮肤类中。现在由开发人员来查找和修改这些并不总是那么容易。
要删除垂直列线或任何其他非必需的皮肤部件,请在初始化事件中将部件的属性设置为 null,如下所示:
抽象数据网格皮肤:
<?xml version="1.0" encoding="utf-8"?>
<spark:DataGridSkin
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
xmlns:spark="spark.skins.spark.*"
xmlns:skins="view.skins.*"
initialize="caretIndicator = null;columnSeparator=null"
/>
要设置标题的高度,请将其设置在 headerComponent 属性上:
<fx:Component id="headerRenderer">
<skins:AbstractDataGridHeaderSkin height="36" />
</fx:Component>
资料来源: http ://ramblingdeveloper.com/ramblings/2011/9/25/skinning-a-flex-spark-datagrid-header.html