博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Beginning Silverlight 4 in C#-Silverlight控件
阅读量:6840 次
发布时间:2019-06-26

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

 

设置控件属性

最简单直接设置属性的方法是使用特性(attribute)句法.但是,在某些情况,只能用元素(element)句法.

特性句法

大部分的属性可以使用特性句法以一个简单的字符串形式表现.在XAML设置一个特性就好像是在XML里设置一个特性.一个XML元素包含一个节点和一些特性.Silverlight控件以相同的方式定义,控件名是节点,属性以特性(attributes)的方式定义.

例如,你可以简单地使用特性句法设置一个按钮控件的Width,Height和Content属性,如下:

元素句法

元素句法是当属性值不能用特性句法的简单的字符串表达时使用.还有,它与XML中的元素非常相似.下面的例子展示给一个按钮添加背景元素:

可类型转换特性(Type-Converter-Enabled Attributes)

某些时候,当通过特性定义属性时,属性值不能用简单的字符串表达,它会转换为一个复合的类型.一个简单的可类型转换特性的例子就是Margin.这个Margin属性可以可以被设为一个简单的字符串,例如:

当你以这样的形式设置Margin属性时,左,右,上和下的Margin都会设为15px.如果你只想设置上Margin为15px,其它为0,怎么办呢?如下:

这里Silverlight会取出字符串"0,15,0,0"同时把它转换为一个复合的类型.这个字符串会转换为4个值:left margin = 0, top margin = 15, right margin = 0, 和bottom margin = 0. 

附属属性

在上一篇文章,你学习了怎样使用附属属性设置一个控件在Canvas里的位置.一个附属属性是一个附属于父控件的属性.在上一篇文章的例子里,你通过设置两个属性指定按钮控件在Canvas对象里的位置:Canvas.Top和Canvas.Left.这两个属性附属于按钮控件的父控件Canvas.

控件嵌套控件

当你第一次看到Silverlight2包含的控件时,你可能感到份外亲切,它们看起来就像期望的那样.但是当你仔细研究控件的特性,你会发现控件比你看它的第一眼的感觉要复杂得多.

Silverlight 2的一个最关键的特性是可以放任何东西到一个控件里.一个按钮控件可以包含一个StackPanel,这个StackPanel又可以包含一个Ellipse和一个TextBlock.一个控件的内容(Contents)可以是什么有一些限制.下面展示一个标准的Silverlight 2按钮包含一个StackPanel,一个嵌套的StackPanel,一个Ellipse,一个TextBlock,和一个ListBox.

正如代码所示,这个例子简单地嵌套一些内容到一个按钮里.正如你所想的,这是一个非常强大的特性.

在Silverlight里处理事件

在为另一个Microsoft的编程框架,Silverlight提供一个事件机制来跟踪发生在应用程序里的actions.两类的actions会被跟踪:

  • 基于一些来自用户的输入而被触发的actions.输入actions会被处理和会从浏览器到Silverlight对象模型向上"冒泡".
  • 基于一个特定的对象的状态变化而触发的actions,包括在应用程序里的对象的状态.这些actions会从Silverlight对象模型里立即处理.

事件处理程序是一些当被触发时立即运行的方法.你即可以通过XAML标记本身定义,也可以在托管代码里定义.下面的练习会显示展示两种方式定义事件处理程序.

在XAML里声明事件

  1. 使用VS2010创建一个名为EventHandlers的Silverlight应用程序.
  2. 为根表格添加4行,2列.
  3. 接着,添加一个按钮到左上单元格,一个TextBlock到右上单元格.
  4. 为这个按钮添加一个Click属性.当你输入到"Click="时,VS会自动提示一个选项来添加一个新的事件处理程序.如下所示.当<新建事件处理程序>选择出现事,按下Enter键,VS就会完成Click属性. 
    代码如下: 
    另外,VS会自动为Silverlight应用程序添加一个名为Button_Click的事件处理程序到后置代码类里,如下: 
    public partial class MainPage : UserControl{    public MainPage() {        InitializeComponent();    }    private void Button_Click(object sender, RoutedEventArgs e) {    }}
  5. 在这个例子里,你会改变TextBlock的Text属性.为了做到这点,你首先要给TextBlock一个name属性,如下: 
  6. 现在在Button_Click事件里改变TextBlock控件的Text属性: 
    private void Button_Click(object sender, RoutedEventArgs e) {    txtXAMLEventText.Text = "现在的时间是:" + DateTime.Now.ToString();}
  7. 运行程序,点击按钮.会显示当前的时间.如下: 

通过托管代码声明事件处理程序

继续在这个项目里练习.

  1. 添加一个按钮到根表格控件的第二行.
  2. 要在托管代码里引用新的按钮和TextBlock,你就必须给他们一个name属性,如下: 
           
  3. 接着,右击页面,选择"查看代码".这会转换到后置代码页面. 
    到这里,你会使用标准的CLR语言来添加事件处理程序.因为你使用的是C#,语法是使用"+="操作符,给它分配一个新的EventHandler.VS会帮助你完成这些.完成后代码如下: 
    public MainPage() {    InitializeComponent();    this.btnManaged.Click += new RoutedEventHandler(btnManaged_Click);}static int i = 0;void btnManaged_Click(object sender, RoutedEventArgs e) {    this.txtManagedEventText.Text = i.ToString();    i++;}
  4. 运行代码,结果如下: 

这个练习显示了怎么使用C#和托管代码定义事件处理程序.

在剩下的部分,我们浏览一遍Silverlight较为常用的表单控件.

Border控件

Border控件为Silverlight的任何一个控件提供一个方法来添加一条边线和背景.尽管每个控件多会有一个Border,你也总是可以放置一个Border到一个StackPanel里,或者放到一个Grid里,结果就是多了一个Border.

添加一个Border到你的Silverlight应用程序是非常简单的,看下面的例子:

效果如图:

Border控件的另一个特性是能使用CornerRadius属性做出圆角效果:

效果如图:

你可以使用Background属性定义背景颜色.就像BorderBrush属性,Background属性可以设为一个颜色,可以设为一个brush类.下面是使用Brush对象设置Border的Background的例子:

效果如下:

扩展控件

-当一个Silverlight应用程序被部署时,它会打包为一个.xap文件.这个文件需要被每个客户端下载才能访问这个Silverlight应用程序.

Silverlight程序的一个优点是.xap文件的size总是很小的.其中一个原因是大部分的用户控件已包含在Silverlight运行时里.

然而,Silverlight在普通控件集合的基础上提供了一些控件.这些控件分别在两个程序集里:System.Windows.Controls.dll和System.Windows.Controls.Data.dll.只有开发者使用了这些程序集的控件时,这些DLLs会被包含进.xap文件.

添加一个扩展控件

当开发者使用其它控件类库的控件时,要在UserControl定义里添加一个xmlns声明.这个xmlns会有一个关联的前缀用于在后面引用那些特别的控件.例如,如果你在VS里为你的Silverlight应用程序里添加一个DataGrid控件,源码会像如下所示:

试试看:使用GridSplitter

一个在 System.Windows.Controls程序集里的控件是GridSplitter.这个控件提供用户可在应用程序里改变行或列宽度的能力.如果使用属性,GridSplitter会极大地改进你的应用程序的外观和用户体验.接下来的练习,你会实现一个简单的GridSplitter.

  1. 使用VS2010创建一个名为GridSplitterControl的Silverlight应用程序.
  2. 在根表格控件里定义2列.第一列150px宽,第二列暂满剩余空间.设置ShowGridLines为True.添加两个TextBlock控件,一个在第一列,一个在第二列,源码如下:
    效果如图: 
    注意你不能看到第二列所有的文本.
  3. 双击VS工具箱的GridSplitter添加控件,,到页面的设计视图里右击GridSplitter控件选择"重置布局"=>"全部" 
  4. 运行程序,效果如下: 

转载于:https://www.cnblogs.com/ywsoftware/archive/2013/01/31/2886444.html

你可能感兴趣的文章
动态代理的工作原理图
查看>>
【计算几何】点在多边形内部
查看>>
iOS利用代理实现界面跳转
查看>>
(二十一)状态模式详解(DOTA版)
查看>>
MySQL累积求和
查看>>
第五周 Word注释与交叉引用
查看>>
BIND9源码分析之 多个view的情况下如何做dynamic update
查看>>
openssl 证书操作
查看>>
精简版StringBuilder,提速字符串拼接
查看>>
位运算
查看>>
HDU 4708 Rotation Lock Puzzle(模拟)
查看>>
Chapter 6 -- Caches
查看>>
wpf/Silverlight/wp中如何绑定模板中的属性
查看>>
Netty Associated -- Channel
查看>>
vim 配置
查看>>
数据结构与算法实验题6.1 s_sin’s bonus byFZuer
查看>>
C#点点滴滴:枚举enum
查看>>
白盒密码入门
查看>>
在数据仓库建模时,应该使用哪种数据类型的度量值
查看>>
Gradle学习系列之九——自定义Task类型
查看>>