Silverlight中的Button控件的两大特殊属性

开发 前端 后端
在Silverlight中Button从ContentControl派生而来,间接从Control派生而来,因为属性继承的原 因,Button控件具有ContentControl控件的Content属性,其中Content属性是object对象,所以我们可以通过以下代码 对Button控件内容进行定义。

开始介绍Content属性之前,请大家记住以下继承树:

  1. Control(abstract)  
  2.      ContentControl  
  3.            Frame  
  4.                 PhoneApplicationFrame  
  5.       UserControl  
  6.            Page  
  7.                 PhoneApplicationPage 

注意ContentControl中Content属性是一个object对象!

在Silverlight中Button从ContentControl派生而来,间接从Control派生而来,因为属性继承的原 因,Button控件具有ContentControl控件的Content属性,其中Content属性是object对象,所以我们可以通过以下代码 对Button控件内容进行定义:

  1. <Button> 
  2.      <Button.Content> 
  3.           Click this Button!  
  4.      <Button.Content> 
  5.   <Button> 

从表面上上述代码没错,但是在silverlight中不允许这样,另外凡是从ContentControl控件派生而来的控件,其Content属性元素标记可忽略,所以更改后的代码如下:

  1. xmlns:system="clr-namespace;assembly=mscorlib" 
  2.   <Button> 
  3.      <system:String>Click this Button</system:String> 
  4.   <Button> 

如果你不喜欢Button控件只显示普遍的文本内容,你也可以设置其Content属性内容为其它元素,但是该元素必须为FrameworkElement派生对象。例如设置Button控件的Content属性内容为一张图片:

  1. <Button> 
  2.      <Image Source="***.png" 
  3.                  Stretch="none"/> 
  4.  </Button> 

由于Button控件是ContentControl派生元素,故Button.Content属性元素语法形式可省略......

另外也可以设置Buton控件内的文本特殊的格式,例如以下代码设置了斜体的文本内容:

  1. <Button> 
  2.       <TextBlock> 
  3.           <Run FontStyle="Italic">Click Me!</Run> 
  4.       <TextBlock> 
  5.   <Button> 

如 果想设置Button控件的Content属性内容为含渐变画刷的椭圆,我们就要用到ContentTemplate属性了;因为如上文所示,如果想设置 Button控件的Content属性内容为非文本内容,就要设置其Content属性内容为FrameworkElement类派生元素,而这里为含渐 变画刷的椭圆,而渐变画刷不是FrameworkElement派生元素,所以就要控制Button控件的ContentTemplate内容模板 了.....

相关XAML代码为:

  1. <Button> 
  2.       <Button.Content> 
  3.            <RadialGradientBrush> 
  4.                 <GradientStop Offset="0“ Color="Blue"/> 
  5.                <GradientStop Offset="1" Color="AliceBlue"/> 
  6.            </RadialGradientBrush> 
  7.       </Button.Content> 
  8.       <Button.ContentTemplate> 
  9.            <DataTemplate> 
  10.                  <Elipse Width="100" 
  11.                             Height="100" 
  12.                             Fill="{Binding}"/> 
  13.            </DataTemplate> 
  14.       </Button.ContentTemplate> 
  15.   </Button> 

显示结果为:

上 述XAML代码中有一个特殊的Binding语法标记,既没有设置Source,也没有设置ElementName或Path属性,只有 “{Binding}“,这表示绑定内容为上述渐变画刷;上述代码实际上还改变了该Button控件的一部分视觉树,其标准Button控件的视觉树为一 下形式:

而这里经过我们对ContentTemplate进行设置,该控件视觉树已经变成以下形式:

Button控件的ContentTemplate属性值为DataTemplate类型,对DataTemplate进行设置可以改变控件的一部分视觉树!

原文:http://www.cnblogs.com/YueHeiZS/archive/2011/12/27/2304126.html

【编辑推荐】

  1. Silverlight版C1OutlookBar初体验
  2. Silverlight***动态和未来前景
  3. Silverlight企业应用开发实践之AgileEAS.NET
  4. Silverlight 5,你的名字是“Windows”
  5. Silverlight开发之偷拿别人HTML控件
责任编辑:陈贻新 来源: One Piece,我来了
相关推荐

2009-07-14 17:50:00

Jython特殊属性

2010-09-10 09:42:37

borderclearCSS

2010-04-01 09:34:06

Oracle函数

2009-07-20 09:27:42

IBATIS.netDAO

2011-08-10 08:55:28

项目失败

2010-05-04 14:30:45

Oracle数据

2010-08-16 10:18:53

DivCSS

2010-09-16 09:33:33

CSS displayCSS display

2009-12-30 13:59:58

Silverlight

2010-08-05 09:05:14

Flex Button

2011-08-11 09:41:38

2009-08-14 15:07:00

C#编译过程

2022-03-01 18:23:17

架构大数据系统

2022-02-24 08:00:00

API混合云数据

2013-09-09 11:14:30

2011-11-02 09:35:34

虚拟化虚拟化管理

2010-07-21 10:25:50

Perl

2010-08-31 09:31:58

Silverlight

2016-01-13 14:54:50

京东京东大脑

2010-04-21 15:06:37

负载均衡算法
点赞
收藏

51CTO技术栈公众号