2008-09-30 89 views
1

在这里将我的头撞在墙上。我不想重新发明轮子。Flex弹出式按钮问题

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

我在这里挣扎的是,我只是想要一个带有图标的按钮,直接打开弹出窗口,而不必再次编写所有弹出式处理代码。计划是用称为SimplePopupButton的新类来重写PopupButton类。这个类只会隐藏箭头,并指向按钮点击处理程序来打开弹出窗口。

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


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

+0

是否要将当前的向下箭头图标更改为自己的或完全清除它? – 2008-09-30 03:34:06

+0

重写箭头并隐藏主键,或隐藏箭头并将我的图标放入主键。我实际上想要一个带弹出按钮的按钮,而不是用于popupButton,popupButtonMenu和ComboBox的对系统adobe。 – Glenn 2008-09-30 11:35:24

回答

3

您是否尝试过设置new skin?不知道它是否会起作用,但比试图写一个新的控件要容易得多。

0

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

+0

这就是我重新发明车轮的意思。我不得不管理已经在popupbutton控件中处理的弹出事件和定位。我试图避免所有这些麻烦。这样做,我也可以像你说的那样写我自己的控制。不过谢谢。 – Glenn 2008-09-30 09:04:01

0

嗯,我可能在这里是一个完全白痴,但为什么你不能只使用一个组合框?我的意思是它上面的操作与没有箭头按钮分离的弹出式按钮基本相同?或者我在这里呆呆了。

+0

组合框是提供选择选项的表单元素。我想要一个弹出窗口,并不一定意味着一个简单的项目列表。我可能希望弹出窗口是日历控件。这就是为什么PopupButton比PopupButtonMenu或ComboBox更好。 – Glenn 2008-09-30 18:22:13

0

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

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

);

+0

问题不是*要弹出什么*。问题在于使控件看起来像一个没有向下箭头的简单按钮。所以主要按钮部分应该用“click”事件打开弹出窗口,并且不应该显示箭头。 – Glenn 2008-09-30 19:43:11

0

这是不大不小的设计师破解的,但我只是设置下列属性对我的弹出式菜单按钮...(或者你可以创建一个风格,如果你想重用)

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

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

一种令人讨厌的黑客,但我做了很像上面的马特似乎工作/看起来没问题。

in 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" 
1

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