Flex弹出按钮问题
我的头撞在这里的墙上。我不想重新发明轮子。
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。然后,如前所述,只需设置按钮的外观即可隐藏向下箭头。