2010-11-27 11 views
0

Ich habe einige VBox mit Knopf. Ich möchte, dass meine Schaltfläche das Label ändert, nachdem Sie darauf geklickt haben. Ich versuche, die Code-Behind-Praxis zu verwenden, aber die Instanz der Schaltfläche ist immer null. Es gibt Code:Flex 3: Code-Behind Problem

package TestPackage 
{ 
    import mx.containers.VBox; 
    import mx.controls.Button; 
    public class ControlsBox extends VBox 
    { 
     [Bindable] 
     public var btnPlay : Button; 
     public function ControlsBox() 
     { 
      super(); 
     } 
     override protected function childrenCreated():void 
     { 
      super.childrenCreated(); 
     } 
     public function ChangeImage():void 
      { 
       btnPlay.label = "a"; 
      } 
    } 
} 

Here is mxml: 
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:controls="TestPackage.*"> 
<controls:ControlsBox id="ctrlVBox"> 
     <mx:Button id="btnPlay" click="this.ctrlVBox.ChangeImage();" label="c"></mx:Button> 
</controls:ControlsBox> 
</mx:Application> 

Was mache ich falsch? Und wie geht das richtig? Dank

Antwort

0

ich dies nicht tun sehr oft in flex, aber ich denke, Sie so etwas wie dies wollen:

<controls:ControlsBox id="ctrlVBox"> 
    <controls:btnPlay> 
     <mx:Button click="this.ctrlVBox.ChangeImage();" label="c"></mx:Button> 
    </controls:btnPlay> 
</controls:ControlsBox> 
+0

Hmmm .... sieht seltsam ... Ich möchte einen Knopf haben und ich möchte die Möglichkeit haben, mit Code-Behind zu arbeiten ... In deinem Code sollten wir einen Button in den anderen einfügen. Ich verstehe nicht, warum ... danke trotzdem – mimic

+0

Der Codebehind deklariert eine * Variable * 'btnPlay', die eine Instanz des Typs' Button' enthalten kann, aber der Wert der Variablen ist anfänglich Null - das Codebehind erstellt nicht tatsächlich ein Schaltflächeninstanz Stattdessen wird der Button * instance * von der mxml-Anweisung '' erzeugt. Die Position des Buttons in '' weist MXML an, der 'btnPlay'-Variablen die neue 'Button'-Instanz zuzuweisen. Sonderbare Syntax, aber es sollte funktionieren. – Lee

+0

[Spark Skinning] (http://help.adobe.com/de_DE/flex/using/WSC8DB0C28-F7A6-48ff-9899-7957415A0A49.html) ist eine viel bessere Passform für das, was Sie versuchen zu tun - es macht diese Art der Sache viel einfacher als der Versuch, im .NET "Codebehind" -Konzept zu schuhen. Genauer gesagt sollten Sie [Skin Parts] (http://www.adobe.com/devnet/flex/articles/flashbuilder4_skin_parts.html) ausprobieren. – Lee