這篇文章解決一個 Flex 4 常見的困擾:把視窗縮小時,怎麼樣都偵聽不到 resize 事件。關鍵在於 Spark 元件預設會「自動無視」超出範圍的內容,只要在根容器加上 `clipAndEnableScrolling="true"`,就能正常偵聽縮小視窗的事件。
為什麼 Flex 4 縮小視窗時偵聽不到 resize 事件?
首先,resize 事件是針對「該元件大小被縮放」時才會產生,所以要監聽 resize,應該在根元件(root container)上註冊事件偵聽:
```actionscript
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
resize="application1_resizeHandler(event)">
<![CDATA[
import mx.events.ResizeEvent;
protected function application1_resizeHandler(event:ResizeEvent):void
{
trace("width: " + width + ", height: " + height);
}
]]>
```
問題出在 Flex 4 的 Spark 元件有個預設行為:自動無視超出範圍大小的東西。因此當我們把視窗縮小時,超出的大小被直接無視,元件根本不認為自己被縮放,自然就偵聽不到 resize 事件。
如何用 clipAndEnableScrolling 解決?
`clipAndEnableScrolling` 這個屬性主要是告訴容器「要不要自動無視超出的範圍」:
| 屬性值 | 行為 |
|---|---|
| `false`(Group 預設值) | 自動無視超出範圍的內容,縮小視窗時不觸發 resize |
| `true` | 裁切並啟用捲動,超出範圍會被視為實際變化,可以偵聽到 resize |
因為 `Group` 的預設值是 `false`(也就是無視超出範圍),我們要先把 `clipAndEnableScrolling` 設定為 `true`,之後縮小視窗時 resize 事件才會正常觸發:
```actionscript
```
延伸閱讀
- Flex 4 Spark Panel 怎麼做成可拖動?自訂 DraggablePanel 完整範例:同樣聚焦 Flex4、Spark,可接著比較不同情境的做法。
- 把 Flex SDK 4 整合進 Flex Builder 3:同樣聚焦 Flex,可接著比較不同情境的做法。
- Flex 圖片不等比縮放設定:Flex3 與 Flex4 的正確寫法:同樣聚焦 Flex、Flex4,可接著比較不同情境的做法。
常見問題
為什麼我的 Flex 4 應用程式縮小視窗時收不到 resize 事件?
因為 Spark 元件(例如 Group)預設 `clipAndEnableScrolling="false"`,會自動無視超出範圍的內容,視窗縮小時元件不認為自己被縮放。把根容器的這個屬性設為 `true` 即可解決。
resize 事件應該註冊在哪個元件上?
resize 事件是針對該元件本身大小被縮放時產生的,所以要在根元件(例如 `s:Application`)上註冊偵聽,而不是在內部的子元件上。
clipAndEnableScrolling 的預設值是什麼?
在 Flex 4 的 `Group` 容器中預設值是 `false`,代表超出範圍的內容會被自動無視。將它設為 `true` 後,容器會裁切內容並啟用捲動,resize 事件也能正常觸發。
參考資料
- Adobe Flex 4 文件:Group.clipAndEnableScrolling 屬性說明
最後更新
2026-08-28(原文發布於 2011-08-23,本文保留原始筆記內容並補上 GEO 結構。)
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2011-08-23
