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; 
}