Flex:后台图像未显示在列表中

时间:2011-05-24 12:05:04

标签: flex actionscript-3 flash-builder

我有一个带有背景图片的自定义组件。 但是当你通过List中的ItemRenderer生成这个组件时,背景图像就消失了。

我做错了什么?

这是一张图片。第一个元素不是在列表中生成的,而是具有背景图像。其他三个是List的一部分,没有背景图像。

enter image description here

以下是List

的MXML代码
<mx:VBox>
    <solutionItems:displaySolutionItem  />  <!-- This element shows the background image -->                            
    <mx:List selectable="false"
         useRollOver="false" 
         id="listControllers" 
         backgroundAlpha="1"
         dataProvider="{controllers}" >
        <mx:itemRenderer>
            <fx:Component>      
                <solutionItems:displaySolutionItem /> <!-- These elements have nog background image -->                             
            </fx:Component>
        </mx:itemRenderer>
    </mx:List>      
</mx:VBox>

以下是<solutionItems:displaySolutionItem />

的代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas 
    xmlns:mx="http://www.adobe.com/2006/mxml"
    backgroundImage="{itemBackGround}"
    backgroundSize="100%">

    <mx:Script>
        <![CDATA[


            [Bindable]
            [Embed(source="assets/Components/ContainerBackgrounds/BoxBg.png", scaleGridLeft="5", scaleGridRight="50", scaleGridTop="5", scaleGridBottom="50")]
            private var itemBackGround:Class;


        ]]>
    </mx:Script>
    <mx:VBox
        paddingBottom="10"
        paddingLeft="10"
        paddingRight="10"
        paddingTop="10">        

        <mx:CheckBox id="chbControllerItem" label="NSL-4601" styleName="titleRed" />                    
        <mx:HBox>                       
            <mx:Image width="67" height="50" id="loader1" source="@Embed(source='assets/Components/ContainerBackgrounds/BoxBg.png')"/> 
            <mx:HBox>
                <mx:VBox>
                    <mx:Label text="Cube size" styleName="formLabel" height="12" />
                    <mx:Label text="Cube config" styleName="formLabel" height="12" />
                    <mx:Label text="Display res" styleName="formLabel" height="12" />
                    <mx:Label text="DPI" styleName="formLabel" height="12" />
                    <mx:Label text="Price" styleName="formLabel" height="12" />
                </mx:VBox>

                <mx:Box>
                    <mx:Label text="50''" height="12" />
                    <mx:Text text="2x3 (1224mm x 3264mm)" height="12" />
                    <mx:Label text="WXGA (1360x768)" height="12" />
                    <mx:Label text="72 dpi" height="12" />
                    <mx:Label text="€ 101.000,00" height="12" />
                </mx:Box>

            </mx:HBox>
        </mx:HBox>
    </mx:VBox>
</mx:Canvas>

它可能很小,但我找不到它。

3 个答案:

答案 0 :(得分:4)

以下将解决问题:

  1. 从itemRenderer的Canvas元素中删除backgroundImage =“{itemBackGround}”

  2. 在itemRenderer类中的VBox之前添加以下内容。我测试了它,它工作正常:

    <mx:Canvas width="100%" height="100%" backgroundImage="{itemBackGround}" backgroundSize="100%"/>
    
  3. 如果您找到更好的方法,请务必更新您的问题以告知我们,

    布赖恩

答案 1 :(得分:1)

您是否尝试在列表中或者在itemRenderer中设置alpha或backgroundAlpha属性?

我猜测列表要么在背景上绘制一些东西,要么阻止绘制背景。但是,您必须逐步通过代码才能确定。

答案 2 :(得分:1)

我没试过,但看起来像 组件未为每个渲染器创建多个图像实例/副本

可能的解决方案可能是,加载图像在任何 Singleton / Constant Class 中,例如模型 NOT 组件/列表中,并在组件/列表中使用模型的属性引用,即所有渲染器的一个副本。

希望这有效