2009-05-07 8 views
1

Ich habe ein HorizontalList-Steuerelement, das einen benutzerdefinierten ItemRenderer verwendet, um jedes Element als eine Umschaltfläche darzustellen. Die Liste erlaubt Drag and Drop, und ich habe this method verwendet, um die Drop-Feedback (Linie) in eine vertikale Position anstelle von horizontal zu drehen, aber mit den Tasten zusammengestampft, ist das Drop-Feedback ziemlich subtil. Ich möchte die Buttons irgendwie aussparen, damit das Drop-Feedback deutlicher wird.Flex: Wie platziere ich Elemente in einem HorizontalList-Steuerelement (mithilfe eines benutzerdefinierten ItemRenderer)

Ich habe durch die Eigenschaften geschaut und nichts fällt auf. Es gibt Padding- und Margin-Eigenschaften, aber ihre Beschreibungen sagen, dass sie das Listen-Steuerelement selbst beeinflussen, nicht die Elemente.

Unten ist der Code meines ItemRenderer. Ich habe eine Polsterung hinzugefügt, aber das scheint nichts zu ändern. Wenn ich Padding hinzufüge, wirkt sich dies auf die Innenseite der Schaltfläche und nicht auf den Abstand zwischen ihnen aus, und das Schaltflächensteuerelement hat keine Randeigenschaften.

Ich nehme an, ich könnte meinen ItemRenderer auf einer Zeichenfläche basieren, um einen Rand zu bekommen, aber dann würde ich nicht die ganze Funktionalität einer Schaltfläche erben.

<?xml version="1.0" encoding="utf-8"?> 
<mx:Button 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    creationComplete="go();" 
    toggle="true" 
> 
    <mx:Script> 
     <![CDATA[ 
      private var _val:int = -1; 
      private function go():void { 
       this.label = data.title; 
       _val = data.index; 
      } 

      override protected function clickHandler(event:MouseEvent):void{ 
       //todo: bubble an event that causes all other 
       //buttons in the list to un-toggle 

       //now do the default clickHandler 
       super.clickHandler(event); 
      } 
     ]]> 
    </mx:Script> 
</mx:Button> 
+1

Haben Sie versucht, dem itemRenderer selbst Padding/Rand hinzuzufügen? – Stiggler

Antwort

1

Wie wäre Ihr Elementrenderers als Container zu schreiben (entweder Leinwand oder HBox) und Anordnen des Button-Element nach innen?

+1

Die Verwendung von Containern als Elementrenderer ist aus Leistungsgründen eine schlechte Wahl. – joshtynjala

+1

Es gibt nur eine kleine Anzahl von itemRenderers, die für ein listenbasiertes Steuerelement erstellt wurden und wiederverwendet werden. Die Verwendung eines Containers beeinträchtigt die Leistung nicht signifikant. –

1

Erstellen Sie eine benutzerdefinierte Skin für Ihre Schaltflächen, die den erforderlichen Abstand enthält. Möglicherweise müssen Sie es mit Füllstilen kombinieren, um sicherzustellen, dass Text oder Symbole nicht über die Oberfläche hinausgehen.

0

Es ist ein bisschen auf der Hacky-Seite, aber Sie können auch über Ihre columnWidth für das tatsächliche HorizontalList-Objekt lügen. Stellen Sie es auf etwas größer als Ihre tatsächliche itemRenderer Breite.

Verwandte Themen