在ActionScript中为backgroundColor
设置mx:DataGridColumn
样式是否有一些特殊技巧?当我尝试以编程方式设置它时(使用适用于其他控件的例程)它不起作用。但是当我在MXML标签中设置它时,它可以正常工作。
这是我的CSS:
HBox
{
}
VBox
{
}
Box
{
}
DataGridColumn
{
/* background-color: #E01080; */
}
DataGrid {
roll-over-color:#CCCCCC;
vertical-scroll-bar-style-name:fseVerticalScrollBar;
horizontal-scroll-bar-style-name:fseVerticalScrollBar;
verticalGridLines: false;
horizontalGridLines: false;
border-thickness:0;
backgroundAlpha: 1;
}
请注意,我有时会对该评论进行注释 - 它不会改变任何内容。
应该有效的AS:
const arrsBackgroundTypesToSet:Array = ["HBox", "VBox", "Box", "DataGridColumn"];
for each (var sTagType:String in arrsBackgroundTypesToSet)
SetCSSStyle(sTagType, "backgroundColor", 0xE01080);
...
private static function SetCSSStyle(sCSSName:String, sStyleName:String, data:*):void {
var css:CSSStyleDeclaration = StyleManager.getStyleDeclaration(sCSSName);
if (css == null) trace("You just tried to set the style " + sCSSName + '/' + sStyleName + " but it couldn't be found");
else css.setStyle(sStyleName, data);
}
正如您所看到的,我在其他方面设置backgroundColor
并且效果相当好。但不适用于mx:DataGridColumn
。为什么呢?
这是一个网格示例,其中样式的直接设置会导致样式更改,但程序化更改不会:
<UBIC:ubiDataGrid id="dg" dataProvider="{objDGData}" width="100%" height="100%" sortableColumns="true"
itemClick="DoClearForm();UserRemote.DoFetch(dg.selectedItem.user_id);"><UBIC:columns>
<mx:DataGridColumn headerText="User Name" dataField="{StringGlobals.COL_USER_NAME}" backgroundColor="#E01080"
sortCompareFunction="{function(o0:VOUser, o1:VOUser):int {return UserSort(o0, o1);}}" />
<mx:DataGridColumn headerText="Printer" dataField="printer"/>
<mx:DataGridColumn headerText="CSV Delimiter" dataField="delimiter"/>
</UBIC:columns></UBIC:ubiDataGrid>
那&#34;用户名&#34;专栏出现在那个不可思议的,可怕的紫红色(?)中,但是其他人没有。
ubiDataGrid
:
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml"
headerColors="{[BrandGlobals.COLOUR_DARK, BrandGlobals.COLOUR_LIGHT]}" selectionColor="{BrandGlobals.COLOUR_SELECTION}"
headerStyleName="brandedheaderstyle" iconColor="{BrandGlobals.COLOUR_TEXT_AGAINST_DARK}"
>
<mx:Script><![CDATA[
import mx.controls.dataGridClasses.DataGridColumn;
import mx.events.DataGridEvent;
/*[Bindable] */public var m_nAccumulatedWidth:Number = 0;
private var m_oWidths:Array = new Array;
public var m_fAdjustableColumnWidthMultiplicity:Number = 1;
public function SetSortColumn(iColumn:Number):void {
dispatchEvent(new DataGridEvent(DataGridEvent.HEADER_RELEASE, false, true, iColumn, null, 0, null, null, 0));
}
protected function SetWidthToSaneNumber(oCol:DataGridColumn, nWidth:Number):void {
const nConcreteWidth:Number = nWidth*m_fAdjustableColumnWidthMultiplicity;
if (nWidth > 0)
oCol.width = nConcreteWidth;
m_nAccumulatedWidth += nConcreteWidth;
}
]]></mx:Script>
<mx:Style>
.brandedheaderstyle {
color: #FFFFFF;
font-weight:bold;
}
</mx:Style>
哦,这是我发现的非常有趣的东西。另一个(也可能是更好的)解决方案是将DataGrid
背景上的alpha归零。网格所在的Canvas
是我想要的颜色,所以如果我
SetCSSStyle("DataGrid", "backgroundAlpha", 0.0);
实际上正常工作!它并没有用backgroundColor
工作,但它适用于backgroundAlpha
。但是,我仍然存在行条带化的问题:它们丢失了。我需要将行条带化。
我使用的是Flex 3.5 SDK。