內容 索引 搜尋
 

觸發程序概觀

在應用程式的生命週期內,使用者介面中的物件會經歷「狀態」的變更。狀態 (例如按鈕的「滑鼠移過」狀態,或是功能表項目的「按下」狀態) 通常是從使用者的角度來定義。身為應用程式作者,您一定需要知道以上兩種狀態,分別透過 UIElement.IsMouseOver 屬性和 MenuItem.IsPressed 屬性套用至物件。

但使用者並不會察覺到這些屬性的值及所代表的狀態。IsMouseOver 和 IsPressed 不是視覺屬性。若要顯示非視覺屬性的變更,必須先觸發「視覺」屬性 (Background 或 Opacity) 變更。例如,讓處於「滑鼠移過」狀態的按鈕,從原本的扁平狀變成凸起狀;或是在按下功能表項目時,變更背景色彩。

物件不僅會變更狀態,也會引發事件。例如,當指標越過按鈕邊界時,按鈕會引發 MouseEnter 和 MouseLeave 事件。事件本身也沒有外觀,因此必須觸發視覺屬性的變更,使用者才會察覺事件。

觸發程序 (及動畫時間軸) 可以建立在文件根元素或套用至控制項的樣式中。例如,您可以修改按鈕的樣式,讓按鈕在變更為「按下」及「滑鼠指向」狀態時有稍微不同的外觀。只要是套用相同樣式的按鈕,就會有相同的行為。如需範例,請參閱將動畫新增至按鈕

觸發程序有兩種:

即將提供美工圖案!

觸發程序 UI,顯示兩個屬性觸發程序 (IsMouseOver 與 IsPressed) 及一個事件觸發程序 (target-element.Loaded)。
IsMouseOver 屬性觸發程序為選取狀態,顯示已變更的屬性 (Border.Background) 及觸發的時間軸 (OnLoaded1)。

如需使用觸發程序的範例,請參閱新增或移除觸發程序建立簡單動畫

屬性觸發程序

屬性觸發程序會定義觸發程序「條件」以及針對滿足的條件所應該採取的動作。範例條件:「button1 的 IsMouseOver 屬性為 true」。範例動作:「將 button1 的 Foreground 屬性設為 Red,並啟動將按鈕放大的動畫 Expand」。

將 Foreground 設為 Red 就屬於一種稱為屬性 Setter 的動作。只有在符合條件時,Setter 才會生效;當不再符合條件時,屬性會回復為先前的值。啟動稱為 Expand 的動畫就屬於一種「進入動作」;當符合條件時就會發生此動作。當不再符合條件時,就會發生結束動作。只有動畫才能以進入或結束動作來控制。下圖顯示此範例屬性觸發程序的生命週期。

觸發程序工作流程圖

觸發程序工作流程圖

請注意,Setter 有能力在整個生命週期內控制 Foreground 屬性;到了第 5 階段時,Foreground 會再次自動重設為 Black。不過,任何由進入動作所執行的屬性動畫都不會復原;到了第 5 階段時,按鈕仍然呈現放大狀態。解決方法就是設計一個將按鈕重新縮小的 Contract 動畫,然後在結束動作中執行這個新的動畫。

屬性觸發程序只能定義於樣式或範本,但就大部分的處理觸發程序來說,最好的作法是將它們放在範本中。

事件觸發程序

事件觸發程序會定義觸發程序條件以及針對滿足的條件所應該採取的動作。範例條件:「在 button1 上引發 MouseEnter 事件」。範例動作:「啟動將按鈕放大的動畫 Expand」。

此範例動作與我們稍早在屬性觸發程序範例中使用的進入動作相同。事件觸發程序與屬性觸發程序的生命週期有所不同,只是單純地執行動作來回應事件。所以,事件觸發程序沒有進入和結束動作;只有動作而已。

如果我們希望滑鼠指標進入按鈕邊界時會放大按鈕,然後當指標離開邊界時又回到正常大小,則我們必須定義一對事件觸發程序及相配的縮放動畫。下列作法顯示如何在 Expression Blend 建立這些事件觸發程序。事件觸發程序可以在樣式、範本或 LayoutRoot 中定義。在此範例中,我們會在樣式中定義一個觸發程序,而在 LayoutRoot 中定義另一個觸發程序。

屬性觸發程序或事件觸發程序?

一個屬性通常由一組對應的事件來反映,您可以選擇設計一個屬性觸發程序或兩個事件觸發程序。例如,使用 IsMouseOver 屬性觸發程序或使用一對 MouseEnter 與 MouseLeave 事件觸發程序,都可以達到相同的效果。請儘可能使用屬性觸發程序,在必要時才使用事件觸發程序。例如,當您不在樣式或範本內時。必須使用事件觸發程序時,為了彌補 Setter 的不足,您可以建立一對動畫並將主要畫面格放在時間 0 上。

觸發程序或事件處理常式方法?

您可以使用事件處理常式來達成觸發程序的一切功能,除此之外,還可以加入任何其他程式設計邏輯,例如在另一個元素設定屬性、載入新的文件、建立新的元素等等。這是因為事件處理常式方法是以 C# 或 Microsoft® Visual Basic® .NET 定義於文件的程式碼後置檔案。如需詳細資訊,請參閱主題事件處理

如需您可使用觸發程序或使用事件處理常式方法來連接的事件清單,請參閱事件快速參照