2010-11-27 9 views
0

J'ai une certaine VBox avec le bouton. Je veux que mon bouton change l'étiquette après avoir cliqué dessus. J'essaie d'utiliser la pratique de code-behind mais l'instance du bouton est toujours nulle. Il y a le code:Flex 3: problème de code-

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> 

Qu'est-ce que je fais mal? Et comment le faire correctement? Merci

Répondre

0

Je ne le fais pas très souvent dans flex, mais je pense que vous voulez quelque chose comme ceci:

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

Hmmm .... semble bizarre ... Je veux avoir un bouton et je Je veux avoir l'opportunité de travailler avec le code-behind ... Dans votre code, nous devrions insérer un bouton dans l'autre. Je ne comprends pas pourquoi ... merci quand même – mimic

+0

Le codebehind déclare une * variable * 'btnPlay' qui peut contenir une instance de type' Button', mais la valeur de la variable est initialement nulle - le codebehind ne crée pas réellement de Instance de bouton Au lieu de cela, le bouton * instance * est créé par l'instruction mxml ''. L'emplacement de 'Button' dans' 'indique à MXML d'assigner la nouvelle instance' Button' à la variable 'btnPlay'. Syntaxe bizarre, mais cela devrait fonctionner. – Lee

+0

[Spark Skinning] (http://help.adobe.com/en_US/flex/using/WSC8DB0C28-F7A6-48ff-9899-7957415A0A49.html) est un bien meilleur ajustement pour ce que vous essayez de faire - il rend ce genre de chose beaucoup plus facile que d'essayer de chausse-pied dans le concept .NET "codebehind". Plus précisément, vous voudrez peut-être consulter [Skin Parts] (http://www.adobe.com/devnet/flex/articles/flashbuilder4_skin_parts.html). – Lee