2

読んでくれてありがとう。

UIComponent にラベルと画像を並べて配置しようとしています。効率的な理由から UIComponent を使用したいのですが、コンポーネント全体がアイコン付きのボタンよりも複雑です。

ラベルまたは画像のいずれかでクリックが発生すると、同じ [クリック] イベント ハンドラーが呼び出されるように、UIComponent 全体でクリック ハンドラーを取得しようとしています。ルート コンポーネントにクリック ハンドラを追加すると機能しますが、ラベルと画像の間にスペースを入れると、それらの間のスペースをクリックできなくなります。ラベルと画像に move(x,y) メソッドを使用して、x/y 座標間に小さなギャップを設けて空間を生成します。

これを修正する方法はありますか?

ありがとう。

4

3 に答える 3

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();
}
于 2010-05-28T01:01:51.863 に答える
0

UIコンポーネントには、クリックを処理するときにキャンバス(UIコンポーネントから拡張される)と同じ問題があると思います。アルファを0(完全に透明)に設定しても、そのキャンバスに背景を指定しない限り、キャンバスをクリックしても何も起こりません。これはアドビが知っているがまだ修正していないバグです。BGがないということは、実際にはそこに何もないことを意味します。その背景を与えるだけでクリック可能になります。残念ながら、UIComponentには背景スタイルがありませんが、キャンバスに切り替えることはできますか?もう1つの方法は、UIComponentに画像を含め、そのアルファを0に設定し、高さと幅を100%に設定することです。

于 2010-05-27T20:23:00.583 に答える
0

代わりに mx:Spacer を試すことができますか? UIComponent はコンテナーではありませんが、それが問題になる可能性があります。UIComponent を使用する代わりに、mx.core.Container を拡張してみてください。ただし、最初にスペーサーを試してください。

編集:これについて考えれば考えるほど、スペーサーが機能すると思います。UI コンポーネントのクリック ハンドラーの場合、実際に起こっているのは、UI コンポーネント内の個々の要素がクリックを登録し、バブルアップしていることです。他の回答が示唆するように、あなたが動きをすると、クリックを登録するものは実際にはありません。スペーサーはその問題を解決し、簡単にする必要があります。

于 2010-05-27T19:50:28.580 に答える