2

我試過在我的自定義行爲中使用VisualStateManager.GetVisualStateGroups覆蓋我的自定義行爲,以及在事件處理程序中添加了AssociatedObject.Loaded事件。兩次我得到一個空的列表。Silverlight:VisualStateManager.GetVisualStateGroups沒有,我怎樣才能得到它們?

是否有另一種方法來獲取爲控件定義的可視狀態組或另一個應附加到的事件處理程序?

是因爲它的問題,是的,控件有VisualStateGroupsVisualStates

回答

3

通常,VisualStateGroups附加屬性附加到控件的ControlTemplate中的頂級FrameworkElement。因此,要檢索此值,您可能需要使用VisualTreeHelper來獲取控件的第一個子項並查看它是否具有VisualStateGroups屬性。

+0

我去我工作的代碼以不同的方式,但我想知道,如果視覺狀態組在用戶控件的根定義,是不是在文件名爲.xaml控制該標記模板? –

+0

我試過這種方法,並且返回的孩子是一個網格,並且視覺狀態確實與它相關聯,但是,VisualStateManager.GoToState只接受控件,而網格不是控件,所以現在我有一個catch-22問題,而我無法設置狀態。 – Murven

4

根據安東尼的回答。 這裏我舉一個Metro App的例子。

public VisualState GetCurrentState(string stateGroupName) 
{ 
    VisualStateGroup stateGroup1 = null; 

    IList<VisualStateGroup> list = VisualStateManager.GetVisualStateGroups(VisualTreeHelper.GetChild(this, 0) as FrameworkElement); 

    foreach (var v in list) 
     if (v.Name == stateGroupName) 
     { 
      stateGroup1 = v; 
      break; 
     } 

    return stateGroup1.CurrentState; 
}