WPF怎么寻找在ItemTemplate内部的各种控件
有如下控件
<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内部的各种控件相关推荐
- Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
原文:Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定) ------------------------------ ...
- WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展
原文:WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展 一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐 ...
- WPF 的内部世界(控件与布局)
我一开始算是比较抵触WPF的,因为用的人少吗.感觉都是窗体应用能和Winform有什么区别.可是我错了,非常感谢我的讲师,给我推荐刘铁猛的<深入浅出WPF>,让我了解到了WPF的魅力--数 ...
- WPF基础五:UI③带标题内容控件Expander
HeaderedContentControl 为包含单项内容并具有标头的所有控件提供基实现. HeaderedContentControl 从 ContentControl 继承 Content 属性 ...
- 『WPF』实现拖动文件到窗体(控件)
前言 实现从窗口外部拖文件到窗口内部并自动捕获文件地址. 第一步 开启属性 启用底层Window的AllowDrop属性,添加Drop事件. Drop事件:当你拖动文件到对应控件后,松开触发. 除Dr ...
- 【WPF】一个类似于QQ面板的GroupShelf控件
最近做控件上了瘾,现在把做的一个类似于QQ面板的控件放上来. [分析] 从整体来看,这个控件应该同ListBox,ListView这类控件一样,是一个ItemsControl,而中间的项,就是它的It ...
- wpf 日期选择对话窗_WPF 4 日历控件(Calendar)
在之前我已经写过两篇关于WPF 4 任务栏(Taskbar)相关的特性.相信自从VS2010 Beta 版放出后,WPF 的粉丝们肯定在第一时间了解了WPF 4 的一些新控件及新功能.赶在明天Visu ...
- C# 实现线程内部与界面控件交互
线程内部无法直接调用web层控件的数据,及线程与界面数据无法直接调用,直接调用会报未知错误,一般解决方法有两种: 方法1:直接更改启动页面数据.是程序无法检测到线程,一般不建议这样解决: 方法二:使用 ...
- WPF中创建水晶动画效果的treeview控件
软件开发中常常会用到treeview之类的导航菜单,如何使我们的菜单更具有视觉冲击力和动感呢,wpf可以帮我们轻易实现,下面我将使用blend来创建一个treeview动画效果资源. 首先我们在ble ...
最新文章
- Intellij IDEA 2020.1 的Plugins 搜索不了插件,连接超时
- jwebsocket
- “拖库”防不胜防,如何早做预防?
- C# 字符串大小写混合转换(同时进行)
- Redis 从入门到起飞(下)
- Python面试题(二)
- 冒泡排序 java_冒泡排序Java版本
- shortcut icon 修改浏览器标签网站图标
- 工业相机5A参数及其对图像采集的影响
- 这哥们到底是应聘的还是来收购公司的?| 今日趣图
- 从问题出发,解密Oracle rdba结构
- Linux内核project导论——网络:Netfilter概览
- tcp发送方的发送速度由接收方给出的接收窗口决定_TCP协议的详解
- 并查集应用——PAT甲级2019春季
- 小程序ios android差异,解决小程序textarea在安卓和ios上padding不一的问题
- ADC学习(2)——频谱性能指标
- 基于树莓派的DLNA和Airplay无线音频传输
- 第一种单击事件方法 onCreate 1、先在按钮中添加onCreate单击事件 android:onClick=wlj/ 2、再在主函数MainActivity中添加自定义方法
- 苹果公司的创始人_世界名校巡礼15——苹果公司创始人的母校加州大学伯克利分校...
- CertPathValidatorException:validity check failed
热门文章
- 怎么让代码不再臃肿,写的像诗一样优雅
- SpringCloud之分布式配置中心(六)
- C# 类型实例化的语法糖--unity下诡异结果
- PHP时间戳 strtotime()使用方法和技巧
- C/C++:sizeof('a')的值为什么不一样?
- 缩短网址将成微博的重要安全性问题
- MyBatis学习总结(五)——实现关联表查询
- OCP 12c最新考试原题及答案(071-3)
- 互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
- 141. Linked List Cycle