none
wpf 如何获取datagrid 中DataGridTemplateColumn中的自定义控件 RRS feed

  • 问题

  • wpf 如何获取datagrid 中DataGridTemplateColumn中的自定义控件 通过获取控件进行属性和方法的控制
    2014年12月24日 0:54

答案

  • 使用 VisualTreeHelper 类  

    WPF查找子控件和父控件方法 - udoless_com


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年12月24日 15:33
  • 如果每个item里你的自定义控件只出现一次的话,可以试试这个:http://www.geekchamp.com/tips/how-to-access-a-control-placed-inside-listbox-itemtemplate-in-wp7

    其实也是 VisualTreeHelper

    private T FindFirstEliementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
            {
                var count = VisualTreeHelper.GetChildrenCount(parentElement);
                if (count == 0)
                    return null;
                for (int i = 0; i < count; i++)
                {
                    var child = VisualTreeHelper.GetChild(parentElement, i);
                    if (child != null && child is T)
                    {
                        return (T)child;
                    }
                    else
                    {
                        var result = FindFirstEliementInVisualTree<T>(child);
                        if (result != null)
                            return result;
                    }
                }
                return null;
            }

    我用的是ItemsControl,遍历的时候:

    for (int i = 0; i < ItemsControlDataList.Count; i++)
    {
        ContentPresenter cp1 = (ContentPresenter)ItemsControl1.ItemContainerGenerator.ContainerFromItem(ItemsControl1.Items[i]);
        if(cp1 != null)
        {
            Grid gd1 = FindFirstEliementInVisualTree<Grid>(cp1);
            if(gd1 != null)
            {
                ......
            }
        }
    }


    My Blog:http://sun8134.cnblogs.com

    2015年1月7日 0:22

全部回复

  • 使用 VisualTreeHelper 类  

    WPF查找子控件和父控件方法 - udoless_com


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年12月24日 15:33
  • 如果每个item里你的自定义控件只出现一次的话,可以试试这个:http://www.geekchamp.com/tips/how-to-access-a-control-placed-inside-listbox-itemtemplate-in-wp7

    其实也是 VisualTreeHelper

    private T FindFirstEliementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
            {
                var count = VisualTreeHelper.GetChildrenCount(parentElement);
                if (count == 0)
                    return null;
                for (int i = 0; i < count; i++)
                {
                    var child = VisualTreeHelper.GetChild(parentElement, i);
                    if (child != null && child is T)
                    {
                        return (T)child;
                    }
                    else
                    {
                        var result = FindFirstEliementInVisualTree<T>(child);
                        if (result != null)
                            return result;
                    }
                }
                return null;
            }

    我用的是ItemsControl,遍历的时候:

    for (int i = 0; i < ItemsControlDataList.Count; i++)
    {
        ContentPresenter cp1 = (ContentPresenter)ItemsControl1.ItemContainerGenerator.ContainerFromItem(ItemsControl1.Items[i]);
        if(cp1 != null)
        {
            Grid gd1 = FindFirstEliementInVisualTree<Grid>(cp1);
            if(gd1 != null)
            {
                ......
            }
        }
    }


    My Blog:http://sun8134.cnblogs.com

    2015年1月7日 0:22