2

我已经尝试VisualStateManager.GetVisualStateGroups在我的自定义行为的OnAttached覆盖中使用,以及AssociatedObject.Loaded在该行为中添加到事件的事件处理程序中使用。两次我都得到一个空列表。

是否有另一种方法来获取为控件定义的视觉状态组,或者我应该附加到另一个事件处理程序?

被问到,是的,控件有VisualStateGroupsVisualStates

4

2 回答 2

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;
}
于 2012-10-11T08:17:59.063 回答
3

通常附加属性附加到控件的VisualStateGroups顶层。因此,要检索此值,您可能需要使用来获取控件的第一个子项并查看它是否具有属性。FrameworkElementControlTemplateVisualTreeHelperVisualStateGroups

于 2011-07-20T12:21:37.610 回答