Flex弹出按钮问题

时间:2020-03-06 14:54:19  来源:igfitidea点击:

我的头撞在这里的墙上。我不想重新发明轮子。

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

我在这里的挣扎是,我只需要一个带有图标的按钮即可直接打开弹出窗口,而不必再次编写所有弹出窗口处理代码。计划是用一个名为SimplePopupButton的新类重写PopupButton类。此类仅隐藏箭头,然后指向按钮单击处理程序以打开弹出窗口。

看起来很简单,但是我看不到一种简单的方法。有什么建议吗?备择方案?

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

解决方案

自从我与Flex进行合作以来已经有一段时间了,但这是我的主意:
创建一个由经典按钮和列表组成的新组件。该组件应具有两个视图状态。该列表在基本状态下不可见,但在组件进入其他状态时应变为可见。当然,其他状态是在单击按钮后输入的。我们可以将列表设置为初始位置,以使其左下角与按钮的左下角对齐。然后创建从基本状态到其他状态的过渡,这将使列表像在标准PopuButton控件中那样"向下滑动"。我们可以同时使用擦除效果和移动效果来执行此操作,在该效果中,我们可以沿列表的y轴移动列表,直到列表的左上角位于其左下角为止。将组件命名为MyPopupButton或者任何我们想调用的名称。为了返回基本状态,只需对这些效果进行相反的处理即可。
至于应用程序的处理代码,当然只需要知道用户从列表中选择的内容即可,因此,没有比平常更多的代码了。
希望这会有所帮助。

嗯,我在这里可能是个白痴,但为什么不能只使用ComboBox?我的意思是,它的作用与不带箭头按钮的弹出按钮基本相同?还是我在这里呆呆。

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

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

);

我们是否尝试过设置新皮肤?不知道它是否会工作,但是比尝试编写新控件要容易得多。

这有点像设计师黑客,但是我只是在popUp按钮上设置了以下属性...(或者,如果我们想重复使用,可以创建样式)

假设我们只想在单击时弹出一个16x16图标弹出菜单...

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

有点讨厌,但是我在上面做了类似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"

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