VisualTree遍历的应用

控件内使用了模板,取得某一模板内的子控件

第一步,通过ListView的ItemContainerGenerator.ContainerFromIndex或者ContainerFromItem拿到这个你要找的某一行的ItemContainer(ListViewItem类型的)

ListViewItem itemContainer = QTabTaskList.ItemContainerGenerator.ContainerFromIndex(n) as ListViewItem;

第二步,通过可视树找到这个Item里面的Progressbar:

ProgressBar progressbar = GetVisualChild<ProgressBar>(itemContainer);
    
......
    public static T GetVisualChild<T>(Visual parent) where T : Visual
    {
      T child = default(T);
      int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
      for (int i = 0; i < numVisuals; i++)
      {
        Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
        child = v as T;
        if (child == null)
          child = GetVisualChild<T>(v);
        if (child != null)
          break;
      }
      return child;
    }

 

posted on 2015-02-10 14:03  zsfwh  阅读(156)  评论(0)    收藏  举报