2010-08-26 4 views
1

J'ai un problème avec les boutons pivotés dans Flex. Ils semblent contaminer les rectangles de focus des autres composants.
Prenez le code source suivant, qui ne pouvait pas être plus simple:Flex: rotation des boutons et changement de focus

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> 
    <mx:VBox width="100%" height="100%"> 
     <mx:Spacer height="100" /> 
     <mx:Button rotation="10" /> 
     <mx:TextArea rotation="0" /> 
    </mx:VBox> 
</mx:WindowedApplication> 

execute Maintenant. Cliquez dans la zone de texte, le rectangle de focus est correct. Appuyez deux fois sur la touche Tab, le rectangle de mise au point autour de la TextArea est pivoté!

Y a-t-il une solution à ce problème, ou devrais-je éviter de tourner les boutons? J'utilise le SDK Flex 3.5.

Merci,

Daniel

Répondre

1

ressemble à un bug dans Flex SDK. Je vois les options suivantes:

  • rectangles de focus désactiver avec focusSkin = "{null}"
  • mettre en œuvre votre propre peau et gérer les rotations correctement
  • mouvement Spark, puisque 3,5 est le (actuellement) dernier SDK de troisième génération
  • essayer de réparer vous-même (je pense qu'il sera difficile ...)

en outre, vous pouvez déposer un bug dans le suivi d'Adobe, mais ils sont profondément dans 4-ème génération de Flex.

Mise à jour: 3.6 nightly build contient aussi ce bogue.

2

Je suis récemment tombé sur ce bug. Voici un link to suggested fix.

Cependant, je me demandais s'il y a une solution plus générale plutôt que d'étendre chaque composant et de surcharger adjustFocusRect.

je suis venu avec extension FocusManger et en remplaçant le getter pour focusPane comme suit:

override public function get focusPane():Sprite 
{ 
    var fp:Sprite = super.focusPane; 
    if (fp && fp.numChildren != 0) 
     fp.getChildAt(0).rotation = 0; 

    return super.focusPane; 
} 

et le définir comme gestionnaire de mise au point de l'application:

private function onPreinitialize():void 
{ 
    application.focusManager = new FocusManagerEx(this); 
} 

Cela semble fonctionner, mais serait bien Si un expert pouvait dire s'il n'y a pas d'embûches, je ne suis pas au courant.