Flex 3: как я могу изменить PopupButton на обычную кнопку, когда доступен только один пункт меню? - PullRequest
0 голосов
/ 21 августа 2009

У меня есть PopUpButton, который содержит только 2 действия. Оба действия являются полными противоположностями друг друга и переключают логическое свойство объекта с true на false или с false на true. Чтобы избежать избыточности, я показываю только одно действие за раз. Таким образом, если свойство имеет значение true, действие по изменению его на true не отображается.

Если в моем всплывающем меню есть одна опция, я бы хотел убрать отображаемое меню и в основном вернуть PopUpButton, чтобы он действовал и выглядел как обычная кнопка. До сих пор я не нашел хорошего способа сделать это в ActionScript без добавления, удаления или изменения стилей для кнопки.

Есть ли хороший способ просто сказать кнопке скрыть переключатель PopUp?

PS : В моем конкретном примере ДА, возможно, было бы проще, если бы я просто использовал кнопку переключения. Тем не менее, я хочу повторно использовать эту кнопку при работе с массивом объектов. Если у меня их больше одного, свойство может быть истинным и ложным одновременно. В этом случае я хочу показать меню, чтобы они могли выбирать, какой вариант устанавливать все свойства объекта.

1 Ответ

1 голос
/ 23 августа 2009

Вы можете попробовать использовать State для этого. Он удалит всплывающую кнопку с несколькими опциями и покажет новую кнопку с одной опцией:

<mx:states>
  <mx:State name="singleOptionState">
    <mx:AddChild relativeTo="{multiOptionPopUpButton}" position="after">
      <mx:Button id="singleOptionButton" 
        width="80" 
        label="{buttonLabel}" 
        click="onClick(event)" />
    </mx:AddChild>
    <mx:RemoveChild target="{multiOptionPopUpButton}" />
  </mx:State>
</mx:states>

Имена и атрибуты, разумеется, будут соответствовать вашему приложению.

Когда вы решите, что пора показывать кнопку с одним параметром, просто наберите

currentState = "singleOptionState";

Когда пришло время показывать всплывающую кнопку с несколькими опциями, просто сделайте:

currentState = "";

Надеюсь, это поможет.

...