WPF 遍历DataTemplate(获取所有控件) 您所在的位置:网站首页 vb隐藏所有控件 WPF 遍历DataTemplate(获取所有控件)

WPF 遍历DataTemplate(获取所有控件)

2023-10-13 21:08| 来源: 网络整理| 查看: 265

情况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 实验室设备网 版权所有