2011-08-15 38 views
1

我一直在使用flex圖表組件,並且想要在圖例中嵌入標記的自定義圖標。我遇到了一些奇怪的行爲,如果直接設置圖標是鏡像的,文本未對齊,但如果使用類工廠和legendMarkerRenderer屬性創建,組件呈現正常。我已經包含一個片段來說明下面的問題。靈活圖表中LegendItem的自定義嵌入標記

解決這個問題可能是可能的,但我很好奇,如果任何人有一個解釋,可能會發生在這裏。

附加信息:的Flex SDK 4.5.0.20967,FlashBuilder 4.5

這是下面的代碼片段的輸出:

Application Snippet

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark"> 
    <fx:Script> 
    <![CDATA[ 
     import mx.charts.LegendItem; 

     [Embed(source="/resources/GraphResetIcon.png")] 
     public static var icon:Class; 
    ]]> 
    </fx:Script> 
    <s:layout> 
     <s:VerticalLayout/> 
    </s:layout> 

    <!-- This works fine --> 
    <mx:LegendItem legendMarkerRenderer="{new ClassFactory(icon)}" markerAspectRatio="1" 
     labelPlacement="right" label="Texty texty" markerHeight="11" markerWidth="11" /> 

    <!-- This does not work --> 
    <mx:LegendItem marker="{new icon()}" markerAspectRatio="1" labelPlacement="right"  
     label="Texty texty" markerHeight="11" markerWidth="11" /> 

</s:Application> 
+0

儘管我仍然不知道爲什麼直接將圖像嵌入到標記中不起作用,但我發現了一種解決方法,即在圖像中嵌入嵌入並將圖像設置爲標記將使佈局功能正確。 – Gizmo490

回答

1

嘗試

<mx:LegendItem marker="{icon}" markerAspectRatio="1" labelPlacement="right"    label="Texty texty" markerHeight="11" markerWidth="11" /> 

編輯:

我翻出我的備份硬盤驅動器,並在這裏對我來說是

//button icons   
[Embed(source='com/magnoliamultimedia/assets/guess.png')] 
private var guessIcon:Class; 
[Embed(source='com/magnoliamultimedia/assets/half_guess.png')] 
private var halfGuessIcon:Class; 
[Embed(source='com/magnoliamultimedia/assets/not_guess.png')] 
//bitmapasset for markers 
[Bindable] 
private var _guessBA:BitmapAsset; 
[Bindable] 
private var _halfGuessBA:BitmapAsset; 
[Bindable] 
private var _notGuessBA:BitmapAsset; 

///... 
private function init():void{ 
    _guessBA = BitmapAsset(new guessIcon()); 
    _halfGuessBA = BitmapAsset(new halfGuessIcon()); 
    _notGuessBA= BitmapAsset(new notGuessIcon()); 
    _markerHeight = _guessBA.height*.75; 
    _markerWidth = _guessBA.width*.75; 
    legend.visible = true; 
} 
//... 
<mx:Canvas id="legend" width="{Application.application.width}" height="75" 
    backgroundColor="#FFFFFF" visible="false"> 
    <mx:constraintColumns> 
     <mx:ConstraintColumn id="rowName" width="20%" /> 
     <mx:ConstraintColumn id="legend1" width="25%" /> 
     <mx:ConstraintColumn id="legend2" width="25%" /> 
     <mx:ConstraintColumn id="legend3" width="25%" /> 
    </mx:constraintColumns> 
    <mx:constraintRows> 
     <mx:ConstraintRow id="colors" /> 
     <mx:ConstraintRow id="icons" /> 
    </mx:constraintRows> 
    <!--color legends--> 
    <mx:LegendItem label="Colors:" id="colorCol1" visible="false" 
      top="colors:10" left="rowName:10" right="legend1:10" fill="{noFill}" 
      markerHeight="0" markerWidth="0" /> 
    <mx:LegendItem label="Correct" id="colorCol2" visible="false" 
      top="colors:10" left="legend1:10" right="legend2:10" 
      fill="{greenFill}" stroke="{outline}" 
      markerHeight="{_markerHeight}" markerWidth="{_markerWidth}" /> 
    <mx:LegendItem label="Wrong" id="colorCol3" visible="false" 
      top="colors:10" left="legend2:10" right="legend3:10" 
      fill="{redFill}" stroke="{outline}" 
      markerHeight="{_markerHeight}" markerWidth="{_markerWidth}" /> 
    <mx:LegendItem label="Not Attempted" id="colorCol4" visible="false" 
      top="colors:10" left="legend3:10" 
      fill="{defaultFill}" stroke="{outline}" 
      markerHeight="{_markerHeight}" markerWidth="{_markerWidth}" /> 
    <mx:HRule id="separator" top="icons:5" left="10" right="10" visible="false" /> 
     <!--icon legends--> 
     <mx:LegendItem label="Icons:" 
      top="icons:10" left="rowName:10" right="legend1" fill="{noFill}" 
      markerHeight="0" markerWidth="0" /> 
     <mx:LegendItem label="Guess" 
      top="icons:10" left="legend1:10" right="legend2:10" 
      marker="{_guessBA}" markerAspectRatio="1" 
      markerHeight="{_markerHeight}" markerWidth="{_markerWidth}" /> 
     <mx:LegendItem label="Half Guess" 
      top="icons:10" left="legend2:10" right="legend3:10" 
      marker="{_halfGuessBA}" markerAspectRatio="1" 
      markerHeight="{_markerHeight}" markerWidth="{_markerWidth}" /> 
     <mx:LegendItem label="Not A Guess" 
      top="icons:10" left="legend3:10" 
      marker="{_notGuessBA}" markerAspectRatio="1" 
      markerHeight="{_markerHeight}" markerWidth="{_markerWidth}" /> 
</mx:Canvas> 
<!--legend colors--> 
<mx:SolidColor id="redFill" color="0x990000" /> 
<mx:SolidColor id="greenFill" color="0x003300" /> 
<mx:SolidColor id="defaultFill" color="0xE6EEEE" /> 
<mx:SolidColor id="noFill" color="0xE6EEEE" alpha="0" /> 
<mx:Stroke id="outline" color="0" weight="1" /> 

原則是什麼在起作用,這幾乎是一樣的,你有開始了什麼,但我明確投新創建的類實例來了BitmapAsset 。

+0

只能使用樣式(legendMarkerRenderer),不能將類或類工廠綁定到實例(標記)。我相當確定這是flex sdk中的一個錯誤,我主要是想知道是否有人知道錯誤在哪裏。 我這樣描述了這個例子,因爲如果你深入挖掘圖例的代碼,第二種方法是Legend類如何創建LegendItem的mxml等價物。 雖然謝謝:) – Gizmo490

+0

將嵌入式資源轉換爲BitmapAsset可解決此問題。非常感謝! – Gizmo490