有如下控件

<Grid><ListBox x:Name="lb"><ListBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal"><CheckBox x:Name="ck"></CheckBox><TextBlock x:Name="tb" Text="{Binding StuId}"></TextBlock><TextBlock Text="{Binding StuName}"></TextBlock><TextBlock Text="{Binding Sex}"></TextBlock><TextBlock Text="{Binding Pwd}"></TextBlock><Button Content="修改" Width="100" Height="30"></Button></StackPanel></DataTemplate></ListBox.ItemTemplate></ListBox><Button Content="Show" Width="100" Height="30" Click="Button_Click"></Button></Grid>

现要知道CheckBox是否选中,但是它是DataTemplate内部的控件,要如何访问到呢,MSDN上这样做的

http://msdn.microsoft.com/zh-cn/library/bb613579(v=vs.100).aspx

所以方法如下

private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject{for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++){DependencyObject child = VisualTreeHelper.GetChild(obj, i);if (child != null && child is childItem)return (childItem)child;else{childItem childOfChild = FindVisualChild<childItem>(child);if (childOfChild != null)return childOfChild;}}return null;}private void Button_Click(object sender, RoutedEventArgs e){ListBoxItem lbitem = null;ContentPresenter myContentPresenter = null;DataTemplate myDataTemplate = null;CheckBox ck = null;TextBlock tb = null;for (int i = 0; i < lb.Items.Count; i++){lbitem = (ListBoxItem)(lb.ItemContainerGenerator.ContainerFromItem(lb.Items[i]));myContentPresenter = FindVisualChild<ContentPresenter>(lbitem);myDataTemplate = myContentPresenter.ContentTemplate;ck = (CheckBox)myDataTemplate.FindName("ck", myContentPresenter) as CheckBox;if (ck.IsChecked == true){tb = (TextBlock)myDataTemplate.FindName("tb", myContentPresenter) as TextBlock;MessageBox.Show(tb.Text);}}}

功能实现...

今天又遇到一个不一样的,DataGrid

好吧,上源代码

<DataGrid x:Name="dataGrid5"AutoGenerateColumns="False"AlternatingRowBackground="LightSteelBlue"RowBackground="Azure"IsReadOnly="True"><DataGrid.Columns><DataGridTemplateColumn><DataGridTemplateColumn.CellTemplate><DataTemplate><CheckBox x:Name="ck"></CheckBox></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn><DataGridTemplateColumn.CellTemplate><DataTemplate><TextBlock Text="{Binding StuName}"></TextBlock></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Header="StuName"><DataGridTemplateColumn.CellTemplate><DataTemplate><StackPanel Orientation="Horizontal" VerticalAlignment="Center"><TextBlock Padding="5,0,5,0"Text="{Binding Resume}"/></StackPanel></DataTemplate></DataGridTemplateColumn.CellTemplate><DataGridTemplateColumn.CellEditingTemplate><DataTemplate><StackPanel Orientation="Horizontal" VerticalAlignment="Center"><TextBlock Padding="5,0,5,0"Text="{Binding Resume}"/></StackPanel></DataTemplate></DataGridTemplateColumn.CellEditingTemplate></DataGridTemplateColumn></DataGrid.Columns></DataGrid>

不错,我们要找的就是ck这个控件,并根据他是否选中来做一些业务处理,我主要是遍历,要获取某一行的checkbox是否被选中,请看这里http://blog.sina.com.cn/s/blog_541e699d0100wjs9.html

DataGridTemplateColumn _dataTemplate = dataGrid5.Columns[0] as DataGridTemplateColumn;FrameworkElement element = null;CheckBox ck=null;for (int i = 0; i < dataGrid5.Items.Count-1; i++){element = _dataTemplate.GetCellContent(dataGrid5.Items[i]);ck=_dataTemplate.CellTemplate.FindName("ck",element) as CheckBox;if (ck.IsChecked == true){MessageBox.Show(string.Format("StuName:{0}",(dataGrid5.Items[i] as Stu).StuName));}}

ok,又搞定...

转载于:https://www.cnblogs.com/HelloMyWorld/archive/2013/03/25/2981706.html

WPF怎么寻找在ItemTemplate内部的各种控件相关推荐

  1. Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)

    原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...

  2. WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展

    原文:WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展 一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐 ...

  3. WPF 的内部世界(控件与布局)

    我一开始算是比较抵触WPF的,因为用的人少吗.感觉都是窗体应用能和Winform有什么区别.可是我错了,非常感谢我的讲师,给我推荐刘铁猛的<深入浅出WPF>,让我了解到了WPF的魅力--数 ...

  4. WPF基础五:UI③带标题内容控件Expander

    HeaderedContentControl 为包含单项内容并具有标头的所有控件提供基实现. HeaderedContentControl 从 ContentControl 继承 Content 属性 ...

  5. 『WPF』实现拖动文件到窗体(控件)

    前言 实现从窗口外部拖文件到窗口内部并自动捕获文件地址. 第一步 开启属性 启用底层Window的AllowDrop属性,添加Drop事件. Drop事件:当你拖动文件到对应控件后,松开触发. 除Dr ...

  6. 【WPF】一个类似于QQ面板的GroupShelf控件

    最近做控件上了瘾,现在把做的一个类似于QQ面板的控件放上来. [分析] 从整体来看,这个控件应该同ListBox,ListView这类控件一样,是一个ItemsControl,而中间的项,就是它的It ...

  7. wpf 日期选择对话窗_WPF 4 日历控件(Calendar)

    在之前我已经写过两篇关于WPF 4 任务栏(Taskbar)相关的特性.相信自从VS2010 Beta 版放出后,WPF 的粉丝们肯定在第一时间了解了WPF 4 的一些新控件及新功能.赶在明天Visu ...

  8. C# 实现线程内部与界面控件交互

    线程内部无法直接调用web层控件的数据,及线程与界面数据无法直接调用,直接调用会报未知错误,一般解决方法有两种: 方法1:直接更改启动页面数据.是程序无法检测到线程,一般不建议这样解决: 方法二:使用 ...

  9. WPF中创建水晶动画效果的treeview控件

    软件开发中常常会用到treeview之类的导航菜单,如何使我们的菜单更具有视觉冲击力和动感呢,wpf可以帮我们轻易实现,下面我将使用blend来创建一个treeview动画效果资源. 首先我们在ble ...

最新文章

  1. Intellij IDEA 2020.1 的Plugins 搜索不了插件,连接超时
  2. jwebsocket
  3. “拖库”防不胜防,如何早做预防?
  4. C# 字符串大小写混合转换(同时进行)
  5. Redis 从入门到起飞(下)
  6. Python面试题(二)
  7. 冒泡排序 java_冒泡排序Java版本
  8. shortcut icon 修改浏览器标签网站图标
  9. 工业相机5A参数及其对图像采集的影响
  10. 这哥们到底是应聘的还是来收购公司的?| 今日趣图
  11. 从问题出发,解密Oracle rdba结构
  12. Linux内核project导论——网络:Netfilter概览
  13. tcp发送方的发送速度由接收方给出的接收窗口决定_TCP协议的详解
  14. 并查集应用——PAT甲级2019春季
  15. 小程序ios android差异,解决小程序textarea在安卓和ios上padding不一的问题
  16. ADC学习(2)——频谱性能指标
  17. 基于树莓派的DLNA和Airplay无线音频传输
  18. 第一种单击事件方法 onCreate 1、先在按钮中添加onCreate单击事件 android:onClick=wlj/ 2、再在主函数MainActivity中添加自定义方法
  19. 苹果公司的创始人_世界名校巡礼15——苹果公司创始人的母校加州大学伯克利分校...
  20. CertPathValidatorException:validity check failed

热门文章

  1. 怎么让代码不再臃肿,写的像诗一样优雅
  2. SpringCloud之分布式配置中心(六)
  3. C# 类型实例化的语法糖--unity下诡异结果
  4. PHP时间戳 strtotime()使用方法和技巧
  5. C/C++:sizeof('a')的值为什么不一样?
  6. 缩短网址将成微博的重要安全性问题
  7. MyBatis学习总结(五)——实现关联表查询
  8. OCP 12c最新考试原题及答案(071-3)
  9. 互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
  10. 141. Linked List Cycle