让你的silverlight更炫(一):从自定义控件说起
(一)创建默认控件模板
要求开发人员使用您的控件定义他们自己的控件模板是不合理的。自定义控件应具有默认的模板,提供默认模板后,人们仍可以使用其他模板,将其覆盖,但如果不要求提供模板,您的控件会更加吸引人。
(1)向控件项目添加名为 Generic.xaml 的文件。(是的,此文件必须命名为 Generic.xaml。大小写无关紧要,但文件名不能改变。)
(2)在 Generic.xaml 中定义样式,该样式使用属性 setter 将值分配给控件的 Template 属性.
Silverlight 运行时自动在控件程序集(Generic.xaml 作为数据源嵌入其中)中查找 Generic.xaml 并将样式应用到控件实例
这里以SimpleButtonDemo为例说明,自定义控件。
在 Generic.xaml 中添加代码如下
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:custom="clr-namespace:SimpleButtonDemo;assembly=SimpleButtonDemo"><Style TargetType="custom:SimpleButton"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="custom:SimpleButton"><Grid x:Name="RootElement"><Rectangle x:Name="BodyElement" Width="200" Height="100" Fill="Lavender" Stroke="Purple" RadiusX="16" RadiusY="16" /><TextBlock Text="Click Me" HorizontalAlignment="Center" VerticalAlignment="Center" /></Grid></ControlTemplate></Setter.Value></Setter></Style></ResourceDictionary>
在SimpleButton.cs 并将以下语句添加到类构造函数
this.DefaultStyleKey = typeof(SimpleButton);
(二)添加模板绑定TemplateBinding
以上有个问题,我们若用下面的代码改变控件宽度,高度,会有以下问题!,该控件仍然是上面Rectangle宽 200,高 100,因为这些值已硬编码到控件模板中。
<custom:SimpleButton Width="250" Height="150" />
(1)模板绑定TemplateBinding的好处
模板绑定:允许分配给控件的属性值向下传递到控件模板,并且是使用 {TemplateBinding} 标记扩展在 XAML 中声明的。
Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"
(三)ContentPresenter
(1)从 ContentControl 派生的自定义控件意味着它具有 Content 属性,在这钟情况下,我们常常用ContentPresenter替换TextBlock。因为TextBlock 只能呈现文本,而 ContentPresenter 可以呈现分配给此控件的 Content 属性的任何 XAML。
(2)现在,SimpleButton 支持两个自定义级别。可以使用自定义模板重新定义其整个可视树,或者仅使用 Content 属性重新定义其内容。而且,您还可以使用简单的 Content 属性更改按钮文本。SimpleButton 的行为越来越接近真正的按钮控件。
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:custom="clr-namespace:SimpleButtonDemo;assembly=SimpleButtonDemo"><Style TargetType="custom:SimpleButton"><Setter Property="Width" Value="200" /><Setter Property="Height" Value="100" /><Setter Property="Background" Value="Lavender" /><Setter Property="FontSize" Value="11" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="custom:SimpleButton"><Grid x:Name="RootElement"><Rectangle x:Name="BodyElement" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" Fill="{TemplateBinding Background}" Stroke="Purple" RadiusX="16" RadiusY="16" /><ContentPresenter Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="{TemplateBinding FontSize}" /></Grid></ControlTemplate></Setter.Value></Setter></Style></ResourceDictionary>
(四)添加 Click 事件
在 Siverlight 中,事件只能向上传递,即“冒泡”操作。路由事件由 RoutedEventHandler 委托定义,并且路由事件处理程序接收 RoutedEventArgs 对象,该对象包含用于确认引发此事件的对象的 Source 属性(如果此事件最初由可视树中的深层对象引发,则该属性不同于传递给事件处理程序的发送者参数)。内置 Button 控件的 Click 事件是一个路由事件,因此 SimpleButton 的 Click 事件也应该是路由事件。
public class SimpleButton : ContentControl{public event RoutedEventHandler Click; public SimpleButton() {this.DefaultStyleKey = typeof(SimpleButton);this.MouseLeftButtonUp += new MouseButtonEventHandler (SimpleButton_MouseLeftButtonUp); } void SimpleButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) {if (Click != null) Click(this, new RoutedEventArgs()); }}
(五)添加可视状态
参考链接:
让你的silverlight更炫(一):从自定义控件说起相关推荐
- 让你的silverlight更炫(三):让BusyIndicator更炫
默认情况下BusyIndicator样式横向的波纹状,下面我们改变下BusyIndicator样式,让其更炫.我们可以在Blend中新建一个ResourceDictionary1.xaml文件,里面放 ...
- excel不能插入activex控件_办公小技巧:制作更炫酷的Excel下拉菜单
在Excel中制作下拉菜单,大都是利用数据有效性,再有就是表单控件中的组合框.数据有效性或表单控件组合框制作下拉菜单,快捷.便利.实用.功能很全面,但也有力所不及的地方,比如设置下拉菜单的字体.颜色. ...
- Cocos游戏引擎3D特效全新升级 更流畅更炫酷
好莱坞大片一度是各大院线叫座又叫好的劲爆卖点,其炫酷劲爽的影视特效是尤为重要的一个因素.对于手游来说,精细流畅而又动感十足的特效亦是如此.Cocos 2d-x 3.x从3.4 beta0版本开始开启了 ...
- 用 Python 给程序加个进度条,让你的程序看起来更炫酷
你好,我是天作. 最近,我真的好丧.一些有截止日期的事情,都是拖到Deadline的前一天才草草了事:对于那些没有截至日期的事情,更是仅仅存在脑子里,徒增了焦虑,却迟迟没有动手. 不幸中的万幸,我渐渐 ...
- 【源码共享】我花2小时写了微信官网的响应式布局HTML+CSS 换成旅行主题风格更炫酷了
微信官网仿写效果 ↑ 移动端响应式效果 ↑ 微信官网首页,简约干净,能学习写好这个首页,就能掌 握HTML网页设计前端盒子的布局.嵌套,及css效果的 使用... 微信官网首页主要有以下几个需要关注的 ...
- 还在用Navicat?这款开源的数据库管理工具界面更炫酷!
数据库管理工具,是后端程序员使用频率非常高的的工具.Navicat.DataGrip虽然很好用,但都是收费的.最近在逛Github的时候,无意间发现了一款开源的数据库管理工具Beekeeper Stu ...
- 让你的网站更炫酷的一些小 tips
本文讲的是让你的网站更炫酷的一些小 tips, 上周,我和一位老客户聊天,她说:"尼克,我觉得我的网站需要改进,但我不能确定我具体需要做什么." 然后我就去问了一圈,包括朋友.家人 ...
- 高端手机竞争加剧,苹果三星投资打造更炫手机
据今日美国报道,在购买未来智能手机时,你需要抵押贷款吗?尽管这么说有点儿夸张,但随着新款iPhone 8有望在下月以超过1000美元的价格发售,我们不禁要问:什么样的人才买得起?事实上,苹果十周年纪念 ...
- 再见丑陋的 SwaggerUI,这款API文档生成神器界面更炫酷,逼格更高!
欢迎关注方志朋的博客,回复"666"获面试宝典 一般在使用 Spring Boot 开发前后端分离项目的时候,都会用到 Swagger.Swagger 是一个规范和完整的框架,用于 ...
最新文章
- 检查邮箱是否包含教育后缀.edu结尾的邮箱
- 【MM模块】 Goods Receipt 收货 2
- android camera viewport rect,Unity 实现屏幕抖动效果(通过Camera Viewport Rect)
- python连接hive kerberos_数据库开发实战教程:使用Python连接Kerberos的Presto
- 《HTML与CSS入门经典(第8版)》——导读
- Neutron的Port详解
- dhcp服务器怎么设置虚拟网段,配置DHCP服务器不同网段分配ip
- 为何数据库也云原生了?
- 微信iBeaconID-微信官方iBeacon蓝牙基站UUID编码
- 安装apache出错
- Linux系统安装Anaconda3保姆级教程
- WPS无法加载EndNote加载项
- cv2.warpAffine 参数详解
- 老嘤学习笔记 python异常处理
- Python | 用Python制作送给女票的生日礼物
- 【实验3 循环结构】7-14 循环结构 —— 中国古代著名算题。趣味题目:物不知其数。
- 考研数学核心知识点总结
- “无人驾驶汽车”挑战现行法律 这些问题必须厘清!
- iphone4 5.0.1完美越狱教程(RedSn0w 0.9.10b3)[转]
- 电子商务代运营模式浅谈
热门文章
- LeetCode | 3 Sum
- [导入]Reporting Services 5: Extensions Custom Report Item
- The method getTextContent() is undefined for the type Node 错误解决办法
- Struts2之文件下载
- android n 支持机型,Android N无缝更新功能不适于现有机型
- Mysql排序添加名词_记面试中问到的MySQL的SQL调优问题
- 最大独立匹配_新车|升级柴油国六动力,配后排独立座椅,瑞风M5新车型上市...
- 比特币、以太坊、瑞波币、万融链和区块链
- 《解读NoSQL》——1.4 小结
- 主人公的出场—一个程序员的成长史(1)