silverlight 视觉树
很多情况下,特别是在为一些已有系统的写应用的时候,由于框架所限,我们能做的事情很有限。
比如一个场景:我们为一个Silverlight WebOS开发一个app应用,我们开发的只是dll 而已,所以我们能做的很有限,原因是webos会加载我们的DLL。。那么我们要控制窗口的坐标,这我们是做不到的,因为只能在web os框架上做处理,我们的App是做不到的。
有一个解决方案,load完后,我们在app中可以一直往上遍历节点,直到我们想要的那个节点。(这个节点有可能超出了我们的app范围了,但是我们还是可以使用)
/// <summary> /// 查找某个父亲节点 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <param name="parentName"></param> /// <returns></returns> public static T FindFirstVisualParent<T>(FrameworkElement obj, string parentName) where T : FrameworkElement { FrameworkElement parent = VisualTreeHelper.GetParent(obj) as FrameworkElement; if (parent != null && parent is T && parent.Name == parentName) { return (T)parent; } else { T ParentOfParent = FindFirstVisualParent<T>(parent, parentName); if (ParentOfParent != null) { return ParentOfParent; } } return null; }
在Sl中,, VisualTree 是一个树形结构,我们可以一直遍历他,一直到根节点。
VisualTreeHelper 是一个SL自带的类,可以用来操作SL的视觉树.