WPF 遍历DataTemplate(获取所有控件) | 您所在的位置:网站首页 › vb隐藏所有控件 › WPF 遍历DataTemplate(获取所有控件) |
情况1:在设定DataTemplate的Name,并且他是在前台表示时,获取DataTemplate里的指定控件。 方法: http://blog.csdn.net/wackelbh/article/details/6003947(参考这篇文章) 情况2:当没有设定DataTemplate的Name或是以Resource方式调用时,获取DataTemplate里的指定控件。方法: 1、这里需要有一个从DataTemplate里获取控件的函数public T FindFirstVisualChild(DependencyObject obj, string childName) where T : DependencyObject { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is T && child.GetValue(NameProperty).ToString() == childName) { return (T)child; } else { T childOfChild = FindFirstVisualChild(child, childName); if (childOfChild != null) { return childOfChild; } } } return null; } 2、稍微改动一下前篇里的代码:或者 3、解下来就写按钮的处理函数:我需要获取DataTemplate里名为"txtName"的TextBlock控件并显示他的Text内容。 private void Button_Click(object sender, System.Windows.RoutedEventArgs e) { TextBlock txt = FindFirstVisualChild(itemsControl, "txtName"); if (txt != null)//判断是否找到 MessageBox.Show(txt.Text.ToString()); } 情况3:当没有设定DataTemplate的里的控件Name或者你压根不知道里面有哪些控件,但是你又想获取他们的值时。例如上一篇,当我动态生成CheckBox后,我想知道哪些CheckBox被选中了。方法: 1、也需要一个获取DataTemplate控件的函数,但是返回的是一个集合。public List GetChildObjects(DependencyObject obj, string name) where T : FrameworkElement { DependencyObject child = null; List childList = new List(); for (int i = 0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |