2010-05-27 98 views
2

感謝您的閱讀。FLEX:UIComponent點擊處理程序?

我正試圖在UIComponent上並排放置一個標籤和一個圖像。爲了提高效率,我想使用UIComponent,整個組件比帶有圖標的按鈕更復雜。

我想要在整個UIComponent上獲得一個點擊處理程序,以便在標籤或圖像上發生點擊時,調用相同的[click]事件處理程序。如果我在根組件上添加點擊處理程序,它可以工作,但是當我在標籤和圖像之間引入空間時,它們之間的空間變得不可點擊。我通過使用標籤的move(x,y)方法和x/y座標之間的小間隙生成空間。

任何想法如何彌補這一點?

謝謝。

回答

1

關於invertedSpear的答案,它不是一個錯誤,它是已知的行爲。有些情況下,您不希望容器的背景捕獲點擊,並且此行爲允許您控制該點擊。

invertedSpear是正確的UIComponent不處理自己的背景樣式。您可以繪製自己的透明背景來捕捉鼠標事件:

override protected function updateDisplayList(w:Number, h:Number):void 
{ 
    super.updateDisplayList(w, h); 

    var g:Graphics = this.graphics; 
    g.clear(); 
    g.beginFill(0xFF0000, 0); // Fully transparent colour. 
    g.drawRect(0, 0, w, h); // Draw to the full size of the UIComponent. 
    g.endFill(); 
} 
+0

完美!謝謝!簡單,清晰,沒有對象實例[快速]。 – davidemm 2010-05-28 13:18:05

0

您可以嘗試使用mx:Spacer嗎? UIComponent雖然不是容器,但可能是你的問題。您可以嘗試擴展mx.core.Container,而不是使用UIComponent。但先嚐試一下墊片。

編輯:我越想這個,我認爲隔離墊會工作得越多。對於UI組件單擊處理程序,實際發生的情況是UI組件中的單個元素正在註冊點擊,並且它們正在冒泡。隨着你做了一個動作,就像其他答案所建議的,實際上沒有任何東西可以註冊點擊。隔離墊應該解決這個問題,並且更容易。

0

我認爲一個UI組件會遇到與處理點擊時畫布(從UI組件擴展)相同的問題。當您單擊畫布時,除非您將該畫布設爲背景,否則即使將Alpha設置爲0(完全透明),也不會發生任何反應。這是Adobe知道的一個錯誤,但尚未解決,這個想法是沒有BG實際上意味着沒有任何東西。只是給它的背景使它可以點擊。現在不幸的是,UIComponent沒有任何背景風格,你可以切換到畫布嗎?另一種選擇可能是在UIComponent中包含一個圖像,將其alpha設置爲0,將高度和寬度設置爲100%