全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Silverlight:获取ControlTemplate中的元素2010年05月31日 heroicYang 程序开发 Go to comment 接触Silverlight也有一段时间了,在实际使用过程中也遇到了不少的问题,不过还好,每次都通过查阅资料后解决了。果然,学习是不可懈怠的啊,怠乃万恶之源。从小我们便被教育:好记性不如烂笔头。虽然这年头、这行业(程序员),像我这样堆代码的基本都很少用笔了吧,所以就还是只有继续敲键盘了。-好记性不如烂键盘。话说前几天在项目中遇到了这样一个问题:在做权限控制的时候,部分操作按钮是位于特殊的自定义UserControl中的,在这个封装的UserControl中则使用到了ControlTemplate(控件模板)。所以在根据权限控制操作按钮是否显示的时候,就需要获取到该操作按钮实例的Name属性,然后设置Name.Visibility=Visibility.Collapsed。问题便由此出现了。问题是什么呢?就是在cs中是不能通过元素的Name属性去访问ControlTemplate中的元素。不过最后采用了比较特殊的方式处理了项目中遇到的这个问题,这个方式就是通过设置ControlTemplate中该元素的Visibility=Binding IsVisibility,然后在cs中处理该UserControl的DataContext属性。至于这个解决方案我想是比较折中的,之后我会专门写一篇图文并茂的详细介绍。而在本文我便介绍一下关于ControlTemplate中的元素是怎样获取的。新建一个Silverlight项目,并添加Themes/generic.xaml(资源字典文件),TestContentControl.cs,Test.xaml(Test.xaml.cs)这三个文件。最初的TestContentControl.cs的代码如下: public class TestContentControl : ContentControl public TestContentControl() this.DefaultStyleKey = typeof(TestContentControl); generic.xaml中代码如下:而Test.xaml中并没有添加代码,仍是默认的添加时的代码。然后在Test.xaml.cs中添加了代码: public partial class Test : UserControl public Test() InitializeComponent(); TestContentControl contentControl = new TestContentControl(); Button button = new Button(); button.Width = 260; button.Height = 50; button.Content = contentControl; this.LayoutRoot.Children.Add(button); 模拟环境就搭建好了,首先看一下运行效果:接下来,便是我在这个地方怎样去访问TestContentControl的Template中的testButton、testTextBox这两个控件了,如单击testButton按钮然后获取或设置testTextBox文本框的值。在查阅MSDN后,才知道ControlTemplate中的元素目前唯有一种方式可以对其操作,那就是继承ContentControl后重写父类的OnApplyTemplate方法。MSDN对OnApplyTemplate方法的一些说明:派生类可以将此方法用作以下方案的通知/入口点: 使用自定义代码生成可视化树的其余部分。 在已应用的模板中运行依赖于可视化树的代码,例如,获取指向来自模板的命名元素的引用。 引入仅当模板中的可视化树完整后才有存在意义的服务。 设置模板中取决于其他因素的元素的状态和属性。其中第二点就很明白的指明了方向。于是修改之前的TestContentControl类,如下: TemplatePart(Name=testTextBox,Type=typeof(TextBox) TemplatePart(Name=testButton,Type=typeof(Button) public class TestContentControl : ContentControl #region Private Field private TextBox testTextBox; private Button testButton; #endregion #region Constructor Function public TestContentControl() this.DefaultStyleKey = typeof(TestContentControl); #endregion #region Override Function public override void OnApplyTemplate() base.OnApplyTemplate(); this.testTextBox = GetTemplateChild(testTextBox) as TextBox; this.testButton = GetTemplateChild(testButton) as Button; this.testTextBox.Text = 测试一哈,获取或设置ContentControl中元素的值; this.testButton.Click += delegate(object sender, RoutedEventArgs e) MessageBox.Show(this.testTextBox.Text); ; #end
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2018年全国导游资格证《政策法规》考试真题及答案
- 2025年本科护士职业规划面试题
- 一建建筑实务历年真题及答案
- 2022年2月忻州市税务系统遴选面试真题带详细解析
- 2025年真题库-辽宁省导游人员资格考试
- 四川高职单招职业适应性测试试卷(二)
- 市场营销单选、多选、判断,案例分析题集锦
- 医院感染暴发处置试题
- 2025年客运从业资格证考试题技巧和方法答案
- 2025年贵阳危险品运输考试题模拟题库
- 2025贵州毕节市市直事业单位面向基层公开考调工作人员考试笔试备考试题及答案解析
- 2025年高压电工作业(特种作业)考试题库(带答案)
- 交换机路由器课件
- (北师大2024版)生物八上全册知识点(默写版+背诵版)
- 装饰施工项目安全管理课件
- 苏州实验中学2026届数学高二第一学期期末监测试题含解析
- 2025年合同能源管理节能改造工程合同能源管理合同
- 2025年山东省科创集团有限公司权属企业招聘(22人)笔试历年常考点试题专练附带答案详解试卷2套
- 共享展厅免责协议书
- 医疗器械质量文件审核批准管理制度
- 青海省西宁市大通县2025-2026学年高三上学期期中考试政治试卷
评论
0/150
提交评论