隨著VisualStateManager和State的出現,讓我們在實作使用者介面的狀態轉換上省了很大的工夫,不過VisualStateManager.GoToState這個Method在Silverlight和WPF的UserControl中都可以運作得很正常(因為Silverlight的MainWindow也繼承了UserControl)。
但是,如果在WPF的Window控制項裡面要利用這個方法來切換State的話,那可是你呼叫它一百次它都不會理你的,你不會看到畫面有任何反應,也不會有任何Exception被丟出來,不過,如果透過GoToStateAction的話倒是可以運作得很開心。
難道說在Window控制項中就不能透過程式進行State間的轉換了嗎!?
隨著VisualStateManager和State的出現,讓我們在實作使用者介面的狀態轉換上省了很大的工夫,不過VisualStateManager.GoToState這個Method在Silverlight和WPF的UserControl中都可以運作得很正常(因為Silverlight的MainWindow也繼承了UserControl)。
但是,如果在WPF的Window控制項裡面要利用這個方法來切換State的話,那可是你呼叫它一百次它都不會理你的,你不會看到畫面有任何反應,也不會有任何Exception被丟出來,不過,如果透過GoToStateAction的話倒是可以運作得很開心。
難道說在Window控制項中就不能透過程式進行State間的轉換了嗎!?
讓我們來做個簡單的小實驗,建立一個WPF專案,並且建立一個UserControl:
接著把這個UserControl加到MainWindow中跑看看,如果沒意外的話,應該很開心的可以如下圖一樣的切換State。
|
<-
-> |
|
再來我們要在MainWindow中依樣畫葫蘆,在MainWindow中也加入兩個State,並且讓它切換:
很開心的執行看看的話,就會發現真的如同之前說的,完全起不了作用啊,一整個Orz....
不過!!!天無絕人之路!!還有兩招可以讓一切變得不一樣:
第一個方法是將原來的
改成
或是透過Microsoft.Expression.Interactivity.Core.ExtendedVisualStateManager的GoToElementState來達到一樣的目的~
噹噹!!State又可以正常切換了!!
|
<-
-> |
|
最後一樣奉上原始碼,請自行服用!!