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;
}
浙公网安备 33010602011771号