博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight实用窍门系列:66.Silverlight的数据模板DataTemplate(二)获取数据模板控件...
阅读量:5936 次
发布时间:2019-06-19

本文共 2948 字,大约阅读时间需要 9 分钟。

 在Silverlight中我们使用了数据模板,在很多时候也需要获取到数据模板上的控件,并且进行改变。本文使用的实例数据源和上节相同,如需了解请下载源码查看。

  当然在这里我们可以分为获取数据模板原始控件和获取数据模板当前行控件两种。

  一:获取数据模板原始控件。即通过“lbTempName.LoadContent()”的方式获取到原始数据模板的根元素(所有的DataTemplate数据模板都只有一个根元素,否则会报错)

    a.Xaml代码如下:

    b.Cs代码如下,使用注意事项在代码注释内标明:

private void btnShow_Click(object sender, RoutedEventArgs e)        {            Button btn = sender as Button;            //1.在这里必须是直接在ListBox.ItemTemplate下写的DataTemplate才能使用此LoadContent()方法            //2.如果是使用ItemTemplate="{StaticResource lbTmp}"的方式则无法获取            //3.此种方式获取到的是模板中初始情况的控件名单。而非当前列的控件名单            StackPanel panel = (StackPanel)this.lbTempName.LoadContent();            StackPanel hidPanel = VisualTreeHelper.GetChild(panel, 1) as StackPanel;            //设置动作无法成功并且反馈到界面,因为它是获取到源模板,而非当前列控件            hidPanel.Visibility =                hidPanel.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;        }

  二:获取数据模板当前行控件。根据点击行按钮事件等方式,通过 VisualTreeHelper.GetParent(触发事件的按钮对象)的方式去获取当前行模板的根元素,然后通过该根元素使用 VisualTreeHelper.GetChild(spParent2, 1)或者 spParent1.FindName("tbName")的方式获取其他子控件。

    a.Xaml代码如下:

    b.Cs代码如下:

private void Button_Click(object sender, RoutedEventArgs e)        {            Button btn=sender as Button;            //获取父级StackPanel            StackPanel spParent1 = VisualTreeHelper.GetParent(btn) as StackPanel;            //通过名字找到当前Item列的tbName元素            TextBox tb = spParent1.FindName("tbName") as TextBox;            tb.Text = tb.Text + "点击";            //获得祖父级StackPanel            StackPanel spParent2 = VisualTreeHelper.GetParent(spParent1) as StackPanel;            //获取到其子元素            StackPanel hidPanel = VisualTreeHelper.GetChild(spParent2, 1) as StackPanel;            //设置动作            btn.Content = btn.Content.ToString() == "展开" ? "隐藏" : "展开";            hidPanel.Visibility =                hidPanel.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;        }

  如需源码请点击  下载。下面是效果图:

本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/856833

转载地址:http://eejtx.baihongyu.com/

你可能感兴趣的文章
用Nohup命令让Linux下的程序真正在后台执行(转载)
查看>>
使用wlst关闭和开启 weblogic console
查看>>
jQuery custom content scroller
查看>>
Hyper-v使用差异磁盘创建虚拟机
查看>>
微服务的团队应对之道
查看>>
第【3】篇 区块链共识机制
查看>>
使用Xtrabackup进行MySQL备份
查看>>
LogStash 安装配置初体验
查看>>
The Java™ Tutorials:Swing
查看>>
JFinal QuartzPlugin
查看>>
python新手入门
查看>>
VMware ESXi的安装和配置
查看>>
Linux如何开启mysql远程连接
查看>>
Android项目目录结构介绍
查看>>
计算机互访
查看>>
mxgraph
查看>>
Linux中Kill进程的N种方法
查看>>
一步步实现Spring框架(二)XML注入
查看>>
Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel
查看>>
IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
查看>>