吴佳鑫的个人专栏

当日事当日毕,没有任何借口

导航

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的视觉树.

 

posted on 2012-08-21 23:36  _eagle  阅读(677)  评论(0编辑  收藏  举报