Flex:无法以编程方式仅在某些控件

时间:2015-07-15 21:33:58

标签: css actionscript-3 flex flex3

在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。

0 个答案:

没有答案