WPF silverlight获取子控件(获取DataTemplate里的子控件)

public static class VisualTreeExtensions
    {
        /// <summary>
        /// 获取父节点控件
        /// </summary>
        /// <typeparam name="T">子控件UI</typeparam>
        /// <param name="obj">子控件</param>
        /// <param name="name">父容器名称</param>
        /// <returns>父容器对象</returns>
        public static T GetParent<T>(this DependencyObject obj, string name = null) where T : FrameworkElement
        {
            DependencyObject parent = VisualTreeHelper.GetParent(obj);

            while (parent != null)
            {
                if (parent is T && (((T)parent).Name == name || string.IsNullOrEmpty(name)))
                {
                    return (T)parent;
                }
                parent = VisualTreeHelper.GetParent(parent);
            }

            return null;
        }
        /// <summary>
        /// 获取子控件
        /// </summary>
        /// <typeparam name="T">UI类型</typeparam>
        /// <param name="obj">父容器对象</param>
        /// <param name="name">子控件名称</param>
        /// <returns>子控件</returns>
        public static T GetChild<T>(this DependencyObject obj, string name = null) where T : FrameworkElement
        {
            DependencyObject child = null;
            T grandChild = null;

            for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
            {
                child = VisualTreeHelper.GetChild(obj, i);

                if (child is T && (((T)child).Name == name | string.IsNullOrEmpty(name)))
                {
                    return (T)child;
                }
                else
                {
                    grandChild = GetChild<T>(child, name);
                    if (grandChild != null)
                        return grandChild;
                }
            }
            return null;
        }
        /// <summary>
        /// 获取子控件集合
        /// </summary>
        /// <typeparam name="T">UI类型</typeparam>
        /// <param name="obj">父容器对象</param>
        /// <param name="name">子控件名称</param>
        /// <returns>子控件集合</returns>
        public static List<T> GetChildren<T>(this DependencyObject obj, string name = null) where T : FrameworkElement
        {
            DependencyObject child = null;
            List<T> childList = new List<T>();

            for (int i = 0; i <= VisualTreeHelper.GetChildrenCount(obj) - 1; i++)
            {
                child = VisualTreeHelper.GetChild(obj, i);
                if (child is T && (((T)child).Name == name || string.IsNullOrEmpty(name)))
                {
                    childList.Add((T)child);
                }
                childList.AddRange(GetChildren<T>(child, ""));
            }
            return childList;
        }

        /// <summary>
        /// 查找某控件下的所有給定類型的子控件集合
        /// </summary>
        /// <typeparam name="T">要查找的子控件類型</typeparam>
        /// <param name="depObj">父控件</param>
        /// <returns>子控件集合</returns>
        public static T FindVisualChild<T>(this DependencyObject depObj, string childName = null) where T : FrameworkElement
        {
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T &&
                        (((T)child).Name == childName || string.IsNullOrEmpty(childName)))
                    {
                        return (T)child;
                    }
                    else
                    {
                        T childOfChild = FindVisualChild<T>(child, childName);
                        if (childOfChild != null && childOfChild is T)
                        {
                            return childOfChild;
                        }
                    }
                }
                return null;
            }
            return null;
        }

        /// <summary>
        /// 查找某控件下的所有給定類型的子控件集合
        /// </summary>
        /// <typeparam name="T">要查找的子控件類型</typeparam>
        /// <param name="depObj">父控件</param>
        /// <returns>子控件集合</returns>
        public static List<T> FindVisualChildren<T>(this DependencyObject depObj, string childName = null) where T : FrameworkElement
        {
            List<T> list = new List<T>();
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T
                        && (((T)child).Name == childName || string.IsNullOrEmpty(childName)))
                    {
                        list.Add((T)child);
                    }

                    List<T> childItems = FindVisualChildren<T>(child, childName);
                    if (childItems != null && childItems.Count > 0)
                    {
                        foreach (var item in childItems)
                        {
                            list.Add(item);
                        }
                    }
                }
            }
            return list;
        }
    }
时间: 2024-11-07 22:29:20

WPF silverlight获取子控件(获取DataTemplate里的子控件)的相关文章

WPF TextBox 控件获取热键并转为 win32 Keys

WPF 中使用的 Key 对象与 WinForm 中的 Keys 不同,两者的按键枚举对象与物理键的映射关系有功能键上有区别,无法进行类型强制转换.使用 win api 注册热键时,需要将之转换成 win32 的键值,可以使用 KeyInterop.VirtualKeyFromKey(),另外,Keys 可以保存组合鍵,Key 则只是单个按键.Keys 的成员中有个 Modifiers,从下图可以看出 0~15位之外,是用来存放功能键的. 从两张图对比上,可以直观地发现两者的区别. 示例代码:

WPF设置控件获取键盘焦点时的样式FocusVisualStyle

控件获取焦点除了用鼠标外,可以通过键盘来获取,比如Tab键或者方向键等,需要设置控件获取键盘焦点时的样式,可以通过设置FrameworkElemnt.FocusVisualStyle属性, 因为几乎所有常用的控件都继承了FrameworkElement,所以绝大部分控件都拥有该属性 // Summary: // Gets or sets a property that enables customization of appearance, effects, // or other style

初步探讨WPF的ListView控件(涉及模板、查找子控件)

本文结合模板的应用初步介绍ListView的应用 一.Xaml中如何建立数据资源 大部分数据都会来自于后台代码,如何Xaml同样的建立数据源呢?比如建立一个学生List: 首先引入命名空间: xmlns:c="clr-namespace:System.Collections;assembly=mscorlib" 然后代码如下:   <c:ArrayList x:Key="stuList">            <local:Student Id=

ASPxCheckBoxList控件获取selected项的text和value的方法

设ASPxCheckBoxList的ClientInstanceName为list_ var needtext; for (var i = 0; i < list_.GetSelectedItems().length; i++) { needtext= list_.GetSelectedItems()[i].text; } ASPxCheckBoxList控件获取selected项的text和value的方法,布布扣,bubuko.com

CheckBoxList控件获取多选择,需要遍历

CheckBoxList控件获取多选择,需要遍历,环境:vs2008 在页面上添加CheckBoxList控件,输入项值 a,b,c,d.然后添加按钮 Button2确定,如何获取CheckBoxList控件多选择呢? protected void Button2_Click(object sender, EventArgs e)    {        string ChbSelected = "";        for (int i = 0; i < CheckBoxLis

通过控件获取cell

#pragma mark - 通过控件获取cell -(UITableViewCell*)GetCellFromTableView:(UITableView*)tableView Sender:(id)sender { CGPoint pos = [sender convertPoint:CGPointZero toView:tableView]; NSIndexPath *indexPath = [tableView indexPathForRowAtPoint:pos]; return [t

listView中的button控件获取索引

1.在listitem中初始化button的时候,给该button添加一个setTag方法,将此时的索引值传进去,然后在button的onclick事件中调用view的getTag方法,即可将listitem的索引读出来,代码如下: tagButton.setTag(position); 此处的tagButton就是定义的button,Position是view里边的位置. 2.初始化button的时候通过setTag方法传入一个item的索引值 private OnClickListener 

WPF用户控件实现类似WinForm的子窗口

1.WPF 介绍 .NET Framework 4 WPF 是下一代显示系统,用于生成Windows 客户端应用程序. 使用 WPF可以创建广泛的独立应用程序以及浏览器承载的应用程序. WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎,旨在利用现代图形硬件的优势.WPF 通过一整套应用程序开发功能扩展了这个核心,这些功能包括Extensible Application Markup Language (XAML).控件.数据绑定.布局.2-D和3-D图形.动画.样式.模板.文档.媒体.文本

JavaScript经典代码【一】【javascript HTML控件获取值】

javascript HTML控件获取值 1.下拉列表框选定值 ddlPageSize.options[ddlPageSize.selectedIndex].value ddlPageSize.options[ddlPageSize.selectedIndex].text 复选框 $get('chkGoogle').checked 控件隐藏与显示: document.getElementById("控件名").style.display='' //显示 document.getElem