Flex - привязка к свойству width с использованием процентов в коде MXML - PullRequest
2 голосов
/ 02 июня 2010

Можно ли установить процентное значение для свойства width UIComponent, определенного в MXML, с использованием привязки данных?

Я пытаюсь достичь чего-то вроде этого (что не работает):

<s:Button width="{buttonWidth}%"/>


Я знаю, что использование процента для width или height свойств в MXML является своего рода хаком в Flex SDK, так как они должны принимать только числовые значения, но так как процентыWW и проценты не доступны в MXML, я я застрял = /

Мне бы очень хотелось, чтобы код не использовался для такой простой вещи, чтобы мой код был максимально понятным и читабельным.

Кто-нибудь знает, как этого добиться?

Ответы [ 4 ]

3 голосов
/ 02 февраля 2011

K, я столкнулся с той же проблемой: привязка значения в процентах к свойствуcentWidth контейнера искры.Сначала я исправил это с помощью некоторого кода, но он мне не понравился, затем я обнаружил, что могу объявить привязку красивым способом MXML:

<fx:Script>
  <![CDATA[
    [Bindable] private var pWidth:uint;
  ]]>
</fx:Script>

<fx:Binding source="pWidth" destination="myContainer.percentWidth"/>

<s:Group id="myContainer" />

Работает как шарм:)

2 голосов
/ 15 декабря 2011

Я использовал одно и то же значение для нескольких элементов и не хотел добавлять привязку fx: для каждого элемента, поэтому я сделал что-то вроде этого:

    <fx:Script>
    <![CDATA[
        private var buttonWidth:int=50;
        private function updateWidth(event:Event):void {
            event.currentTarget.percentWidth=buttonWidth;
        }
    ]]>
</fx:Script>
<s:Button id="button1" add="updateWidth(event)"/>
<s:Button id="button2" add="updateWidth(event)"/>
<s:Button id="button3" add="updateWidth(event)"/>
<s:Button id="button4" add="updateWidth(event)"/>
<s:Button id="button5" add="updateWidth(event)"/>
1 голос
/ 30 сентября 2011

Элегантное решение будет:

<s:Button percentWidth="{buttonWidth}" />
0 голосов
/ 02 июня 2010

Вы можете расширить класс Button (возможно, назовите его PercentButton и т. Д.) И присвоить ему связываемое свойство (назовите его, скажем, _pctWidth), дать ему открытый и открытый сеттер, и в вашем сеттере вы делаете это:

[Bindable]
private var _pctWidth:Number;

public function set pctWidth(value:Number) : void {
  _pctWidth = value;
  percentWidth = _pctWidth;
  invalidateDisplayList();
}
...