【问题标题】:Silverlight: VisualStateManager.GetVisualStateGroups doesn't, How can I get them?Silverlight:VisualStateManager.GetVisualStateGroups 没有,我怎样才能得到它们?
【发布时间】:2011-07-19 19:55:38
【问题描述】:

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

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

有人问,是的,控件有VisualStateGroupsVisualStates

【问题讨论】:

    标签: c# silverlight silverlight-4.0 visualstatemanager attachedbehaviors


    【解决方案1】:

    基于安东尼的回答。 这里我举一个 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;
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我对我正在处理的代码采取了不同的方式,但我想知道,如果 Visual 状态组是在 UserControl 的根目录中定义的,那不是 .xaml 文件中的标记控制模板?
      • 我尝试了这种方法,返回的孩子是一个Grid,视觉状态确实与之相关联,但是VisualStateManager.GoToState只接受控件,而Grid不是控件,所以现在我有了一个 catch-22 问题,我无法设置状态。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多