2012-04-10 2 views
1

Ich habe ein Balkendiagramm mit der vertikalen Achse auf diese WeiseWie ein Click-Ereignis zu Achsenbeschriftungen in Flex hinzuzufügen

<mx:verticalAxis > 
    <mx:CategoryAxis id="catAxis" title="Employee" categoryField="id"/> 
</mx:verticalAxis> 

Ich würde für die Etiketten auf der vertikalen Achse anklickbar sein. Wenn also ein Benutzer auf eine Beschriftung klickt, wird ein Klickereignis ausgelöst und ich kann etwas damit tun. Ich bin nicht daran interessiert, auf die Leiste selbst zu klicken (ich weiß, wie ich das erreichen kann)

Ich habe versucht, der CategoryAxis vom Typ Mouse.Click einen Ereignis-Listener hinzuzufügen, aber nichts wird ausgelöst.

Jede Hilfe wird geschätzt.

Antwort

1

OK, ich habe es zur Arbeit. Ich werde die Antwort posten, damit andere mit einer ähnlichen Anforderung profitieren können. Also, Timofei Davydik hat mir geholfen, in die richtige Richtung zu schauen. Ich habe eine ActionScript-Klasse namens MyLabelRenderer erstellt, die ChartLabel erweitert. In seinem Konstruktor fügte ich alle meine Ereignis-Listener hinzu, wie das Mausklick-Ereignis, das ich brauchte.

Dies war der schwierige Teil. Vielen Dank KB (ein Freund) für die Bereitstellung der richtigen Instanziierung. In der Hauptanwendung, wo mein Diagramm ist, ich habe eine Instanz meiner neuen Klasse MyLabelRenderer auf diese Weise instanziiert:

private var myLabelRenderer:ClassFactory = new ClassFactory(MyLabelRenderer); 

Dann Sie es auf das AxisRenderer Objekt auf diese Weise zuordnen:

<mx:verticalAxisRenderers> 
    <mx:AxisRenderer axis="{catAxis}" labelRenderer="{myLabelRenderer}"/> 
</mx:verticalAxisRenderers> 

viel Glück ...

+0

Hinweis: Sie sollten dies auch ohne Erstellen einer Variablen und Verwendung des geschweiften Klammerbindungsausdrucks tun können, indem Sie den 'labelRenderer' mit einem String angeben, der der vollständig qualifizierte Paketname Ihrer Klasse ist. Normalerweise mache ich das mit "Lists" und es ist die "itemRenderer" -Eigenschaft, die auch eine 'ClassFactory' erwartet. Ich frage mich, warum das funktioniert ... Die Dokumentation für 'ClassFactory' erklärt es wie folgt:" MXML lässt Sie die folgende Syntax verwenden: '' Die MXML Der Compiler erstellt automatisch die ClassFactory-Instanz für Sie. " Wie ordentlich! –

0

Ich schlage vor, die folgenden:

  1. Erstellen Sie Ihre individuelle Achse Renderer (extend AxisRenderer) und weisen es der verticalAxisRenderer Stil Eigenschaft Axis Sie verwenden.
  2. Erstellen Sie Ihren benutzerdefinierten Beschriftungsrenderer und weisen Sie ihn der labelRenderer-Eigenschaft Ihres Achsenrenderer zu. Sie können Klick-Listener darin einfügen. Hinweis: Der Label-Renderer muss die IDataRenderer- und IFlexDisplayObject-Schnittstellen implementieren.
+0

@Timofie Vielen Dank für den Vorschlag, aber ich bin mir nicht sicher, ob ich Ihren Ansatz verstehe. Kannst du bitte einige Details angeben? – Alaa