



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高端热稳定剂项目可行性研究报告
- 钒渣钠化焙烧项目可行性研究报告
- 防汛知识培训笔记课件
- 防汛知识培训与演练课件
- 土石方工程施工协议
- 可再生能源投资机会研究
- 营销推广合作协议书模板
- 湖北省武汉市2025年九年级上学期数学月考试题附答案
- 电子合同格式4篇
- 设备租赁合同与设备租赁合同范本3篇
- 2025年调饮师职业技能竞赛(省赛)考试题库(含答案)
- 班级量化管理方法分享
- 土方倒运施工方案作业方案
- 工程部员工绩效考核方案
- 数学 第一册(五年制高职) 课件 3.3.1增函数与减函数的定义
- 抢救车管理制度
- Python工程应用-数据分析基础与实践课件-第3章
- 应急处突知识培训课件
- 光伏并网发电项目施工进度计划范文
- 人教版初中英语七八九全部单词(打印版)
- 某自来水厂运营管理项目服务方案(技术方案)
评论
0/150
提交评论