2008-09-30 93 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。然後,如前所述,只需設置按鈕的外觀即可隱藏向下箭頭。