Flex弹出按钮问题

时间:2008-09-30 03:22:28

标签: flex

我的头靠在墙上。我不想重新发明轮子。

PopupButton的默认Flex 3类是两个按钮的组合。一个是带有标签和/或图标的普通按钮,第二个是打开弹出窗口的箭头。

我在这里的斗争是,我只想要一个带有图标的按钮,可以直接打开弹出窗口,而无需再次编写所有弹出处理代码。计划是用一个名为SimplePopupButton的新类覆盖PopupButton类。这个类只是隐藏箭头,并指向按钮单击处理程序以打开弹出窗口。

看起来很简单,但我没有看到一个简单的方法来做到这一点。建议?替代?


[编辑]我想要一个16x16图标按钮,打开一个弹出窗口。随flex附带的PopupButton有两个按钮:“它包含一个主按钮和一个辅助按钮,称为弹出按钮,当用户单击弹出按钮时会弹出任何UIComponent对象。” (source)。我想要主按钮打开弹出窗口,然后隐藏弹出按钮。 (反之亦然)

7 个答案:

答案 0 :(得分:3)

您是否尝试过设置new skin?不确定它是否会起作用但是比尝试编写新控件要容易得多。

答案 1 :(得分:1)

在Flex 3.4中,PopUpButton控件有一个名为“openAlways”的属性,如果设置为true,则允许主按钮也打开popUp。然后,如前所述,只需设置按钮的外观以隐藏向下箭头。

答案 2 :(得分:0)

自从我与Flex合作以来已经有一段时间了,但这是我的想法:
创建一个由经典按钮和列表组成的新组件。该组件应具有两种视图状态。该列表不应在基本状态中可见,但在组件进入另一个状态时应该可见。当然,另一个状态是点击按钮进入的。您可以将列表设置为最初定位,以使其左下角与按钮的左下角对齐。然后创建从基本状态到另一个状态的转换,这将使列表像在标准PopuButton控件中一样“向下滑动”。您可以通过同时使用擦除效果和移动效果来执行此操作,在该移动效果中,您可以在y轴上移动列表,直到它的左上角位于左下角的位置。将组件命名为MyPopupButton或您想要调用它的任何名称。要返回基态,只需对这些效果进行反转即可。 至于处理代码 - 您的应用程序当然只需要知道用户从列表中选择了什么,因此不再需要代码。
希望这有用。

答案 3 :(得分:0)

嗯,我可能在这里是个白痴,但为什么你不能只使用一个ComboBox?我的意思是它的动作基本上与没有箭头按钮分离的弹出按钮相同?或者我在这里愚蠢。

答案 4 :(得分:0)

尝试找到的弹出属性 here。它应该设置为弹出窗口。

print(</mx:Script>
    <![CDATA[
          import mx.controls.Alert;
          public var myAlert:Alert = new Alert();
     ]]>
    </mx:Script>
    <mx:popUpButton popUp="{myAlert}" label="Button"/>

);

答案 5 :(得分:0)

这是一个设计师黑客,但我只是在我的popUp按钮上设置了以下属性...(或者你可以创建一个样式,如果你想重用)

假设你只想要一个16x16的图标来点击菜单时弹出一个菜单......

<mx:PopUpButton icon="@Embed(source='pathToIcon.png')" arrowButtonWidth="16" paddingLeft="0" paddingRight="0" width="16" height="16" popUp="{menu}"/>

答案 6 :(得分:0)

有点讨厌的黑客,但我做了一些像Matt一样的东西似乎工作/看起来没问题。

CSS中的

.camButtons
{
    padding-left:0;
    padding-right:1;
    up-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControlsOver");
    over-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControls");
    down-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControls");
    disabled-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControls");

    pop-up-up-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControlsOver");
    pop-up-down-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControls");
    pop-up-over-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControls");
}

<mx:PopUpButton width="38" popUpGap="0" paddingLeft="37" arrowButtonWidth="38" id="flirts_btn" popUp="{flirts_menu}" styleName="camButtons" icon="@Embed(source='/assets/images/skins.swf', symbol='Icon_WinkOver')" downIcon="@Embed(source='/assets/images/skins.swf', symbol='Icon_WinkOver')" disabledIcon="@Embed(source='/assets/images/skins.swf', symbol='Icon_Wink')" toolTip="Send Flirt to User" buttonMode="true" useHandCursor="true" />

....重要的部分......

pop-up-up-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControlsOver");
    pop-up-down-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControls");
    pop-up-over-skin: Embed(source="/assets/images/skins.swf", symbol="Button_ChatRoomControls");


width="38" popUpGap="0" paddingLeft="37" arrowButtonWidth="38"