一步一步学Silverlight 2系列(2):基本控件

概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章带您快速进入Silverlight 2开发。

本文为系列文章第二篇学习几个基本的控件。

在Silverlight 2中,提供了大量的控件,包括Button、、Calendar 、CheckBox 、DataGrid 、DatePicker 、GridSplitter 、HyperlinkButton 、ListBox 、RadioButton 、ScrollViewer 、Slider 、ToggleButton、ToolTip 、WatermarkedTextBox等,本文将讲述其中的几个控件之用法。

控件之ToggleButton

翻转效果在AJAX时代已经相当多了,Silverlight中内置了ToggleButton控件,可以使用如下XAML代码声明一个ToggleButton:

TerryLee_Silverlight2_0010

运行后界面如下:

TerryLee_Silverlight2_0011

单击按钮后,控件效果外观效果将会改变:

TerryLee_Silverlight2_0012

ToggleButton控件有一个很重要的属性IsThreeState,指示控件是否保持三种状态,如设为false,则只会保持两种状态。

控件之WatermarkedTextBox

WatermarkedTextBox即水印效果文本框,可以在文本框未获得焦点之前显示一段文字提示信息,也可以显示其它的控件。如下面的XAML中,在第一个WatermarkedTextBox中指定水印效果为显示一段文字提示“Please enter password”,而第二个则指定水印效果为一张图片:

TerryLee_Silverlight2_0013

运行后效果如下所示:

TerryLee_Silverlight2_0014

单击其中一个文本框:

TerryLee_Silverlight2_0015

控件之ScrollViewer

ScrollViewer控件使用非常简单,当其中显示的内容超过它自身的大小时,就会有滚动条出现。通过属性HorizontalScrollBarVisibility和VerticalScrollBarVisibility来控制纵向和横向滚动条是否出现:

TerryLee_Silverlight2_0016

运行上面的示例:

TerryLee_Silverlight2_0017 

控件之ToolTip

ToolTip控件很多时候都用于其它控件的内嵌控件,如Button控件的ToolTip附加属性等。声明ToolTip控件如下面的XAML所示,当鼠标放上按钮时显示一个简单的信息提示:

TerryLee_Silverlight2_0018

运行后鼠标放上按钮时效果:

TerryLee_Silverlight2_0019

结束语

本文简单的演示了Silverlight 2中的几个控件的使用,对于DataGrid和ListBox等控件一般用来显示列表数据,将会在后面的数据绑定中讲述,而其它的诸如Button、TextBlock等控件的使用非常简单,这里不再讲述。

下一篇:一步一步学Silverlight 2系列(3):界面布局

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Tag标签: Silverlight,XAML
posted @ 2008-03-07 21:23 TerryLee 阅读(21016) 评论(92)  编辑 收藏 网摘 所属分类: [03]  银光点亮世界

  回复  引用  查看    
#1楼2008-03-07 22:32 | 李永京      
o(∩_∩)o... 真快啊,大家可以看看中文的资料好好的入门学习一下。
  回复  引用  查看    
#2楼[楼主]2008-03-07 22:34 | TerryLee      
@李永京
呵呵,晚上有点时间,就看了一下:)

  回复  引用  查看    
#3楼2008-03-08 11:31 | aspnetx      
支持
新版本的发布开发起来确实要方便好多

  回复  引用  查看    
#4楼[楼主]2008-03-08 11:31 | TerryLee      
@aspnetx
是的,比1.0的时代强大了不少:)

  回复  引用    
#5楼2008-03-08 23:34 | skyearth[未注册用户]
请问楼主,WatermarkedTextBox中的那个图片的路径是什么回事
我放到根目录下面怎么没有效果

  回复  引用  查看    
#6楼[楼主]2008-03-08 23:57 | TerryLee      
@skyearth
图片应该放在Silverlight项目中。

  回复  引用  查看    
#7楼2008-03-09 00:24 | 飞地      
http://terrylee.cnblogs.com/" target="_blank">TerryLee
我下面的这个目录结构有什么问题没有,还是没有看到图片.

提示我
Media “admin.jpg” in control ”Xam1“ could be found
还请楼主多多指教。

  回复  引用  查看    
#8楼2008-03-09 00:26 | 飞地      
楼主要注意身体哦,我先休息了。
晚安!

  回复  引用  查看    
#9楼[楼主]2008-03-09 00:31 | TerryLee      
@飞地
明天有空把你的代码粘贴一下吧:)

  回复  引用  查看    
#10楼2008-03-09 11:20 | 生鱼片      
@飞地
《WatermarkedTextBox.Watermark》《Image Source="11.jpg" HorizontalAlignment="Left"》《/Image》《/WatermarkedTextBox.Watermark》
你那样放这样引用我这没问题啊

  回复  引用  查看    
#11楼[楼主]2008-03-09 12:24 | TerryLee      
@生鱼片
按照上面的目录结构,我那样引用也没出现问题啊

  回复  引用    
#12楼2008-03-11 13:49 | 一迷途[未注册用户]
楼主: 我的也无法显示图片,配置和你一样!非常纳闷!
  回复  引用  查看    
#13楼[楼主]2008-03-11 14:31 | TerryLee      
@一迷途
这样吧,你用一张.png格式的图片试试看,我用gif和jpg格式好像也显示不出来:)

  回复  引用    
#14楼2008-03-12 10:23 | JeffreyChen[未注册用户]
我的图片也无法显示,格式用的png,结构跟 飞地 的一样
  回复  引用  查看    
#15楼[楼主]2008-03-12 10:56 | TerryLee      
@JeffreyChen
怎么会这样呢?把你的那段代码贴出来看一下吧。

  回复  引用    
#16楼2008-03-12 15:03 | JeffreyChen[未注册用户]
可以了,我是直接给一个gif格式的直接改扩展名变成的png,大哥速度太快了,跟不上呀,呵
  回复  引用  查看    
#17楼[楼主]2008-03-12 16:44 | TerryLee      
@JeffreyChen
呵呵,直接修改的肯定不行了。

Beta1还是有很多问题,居然不支持jpg和gif格式的,唉。。。

  回复  引用    
#18楼2008-03-13 09:10 | junelee12112003[未注册用户]
好像图片要放到web项目里才可以
  回复  引用    
#19楼2008-03-13 11:02 | JeffreyChen[未注册用户]
不一定要放到Web项目中的,好久没搞过WEB开发了,呵
向TerryLee 大哥学习呀,一直在做winFrom,感觉做web要累些,呵

  回复  引用  查看    
#20楼[楼主]2008-03-13 12:59 | TerryLee      
@junelee12112003
图片放在Silverlight项目中的

  回复  引用  查看    
#21楼[楼主]2008-03-13 12:59 | TerryLee      
@JeffreyChen
谢谢:)

做Web要累些,这倒不见得吧,呵呵

  回复  引用  查看    
#22楼2008-03-15 13:48 | tatung zhang      
@TerryLee
为什么在使用ToogleButton时只要设置他的IsThreeState属性时就会弹出错误提示,
===============
灾难性故障 (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
at MS.Internal.XcpImports.CreateObjectByTypeIndex(UInt32 typeIndex)
at System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex).....
======================================
不知道TerryLee有没遇到过这样的错误???

  回复  引用  查看    
#23楼[楼主]2008-03-15 17:20 | TerryLee      
@tatung zhang
我这儿设置之后没有出现这样的问题啊

  回复  引用  查看    
#24楼2008-03-23 20:02 | 飞地      
@TerryLee
那个问题我解决了一部分,我先用一个PNG的图片实验了一下,
OK,可以看到,然后用JPG的,搞定了,但是我换了一个GIF的,没有效果。
P.S.
忙了段时间,都更新到了32了,怀疑能否赶上楼主哦。

  回复  引用  查看    
#25楼[楼主]2008-03-24 21:26 | TerryLee      
@飞地
慢慢来吧,呵呵:)

  回复  引用    
#26楼2008-03-25 21:05 | 332[未注册用户]
请问楼主:我运行程序后,再关闭刚打开的页面,为什么程序还处在运行状态?
谢谢!!

  回复  引用  查看    
#27楼[楼主]2008-03-25 22:22 | TerryLee      
@332
程序还处在运行状态是什么意思?

  回复  引用  查看    
#28楼2008-04-07 23:14 | 枫之一刀      
感谢楼主的无私奉献,认真学习。
  回复  引用    
#29楼2008-04-10 16:00 | 曾经来过[未注册用户]
tatung zhang
@TerryLee
为什么在使用ToogleButton时只要设置他的IsThreeState属性时就会弹出错误提示,
===============
灾难性故障 (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
at MS.Internal.XcpImports.CreateObjectByTypeIndex(UInt32 typeIndex)
at System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex).....
======================================
不知道TerryLee有没遇到过这样的错误???
-----------------------------------------------------------------
有这样的问题

  回复  引用    
#30楼2008-04-10 16:01 | 曾经来过[未注册用户]
为什么在使用ToogleButton时只要设置他的IsThreeState属性时就会弹出错误提示,
------------------------------------------------------------

尽管有错,但是你别管,保存,关闭该页面,重新打开它,就没事了

  回复  引用  查看    
#31楼2008-04-23 17:14 | IT爱好者      
===============
灾难性故障 (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
at MS.Internal.XcpImports.CreateObjectByTypeIndex(UInt32 typeIndex)
at System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex).....
======================================


这个错误我也出现了,不过后来也没出现,可能是SilverLight的一个小bug吧

  回复  引用  查看    
#32楼2008-05-07 21:52 | 凯锐      
--引用--------------------------------------------------
IT爱好者: ===============
灾难性故障 (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
at MS.Internal.XcpImports.CreateObjectByTypeIndex(UInt32 typeIndex)
at System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex).....
======================================


这个错误我也出现了,不过后来也没出现,可能是SilverLight的一个小bug吧
--------------------------------------------------------
我也出現過, 但保存,關閉該頁之后再打開,又可以了。

  回复  引用    
#33楼2008-05-08 12:43 | davidguoliu[未注册用户]
@tatung zhang

我也遇到了同样的问题。

  回复  引用  查看    
#34楼2008-05-22 11:08 | Longkin      
那如果我要用动态数据怎么办,不能也把图片放在,sl项目里吧?
  回复  引用  查看    
#35楼2008-05-26 19:34 | LanceZhang      
奇怪,貌似silverlight只支持PNG图片,呵呵
  回复  引用  查看    
#36楼2008-06-16 18:34 | 飄lá┽蕩去      
在beta2版本下好像没有WatermarkedTextBox和ToolTip,有ToolTipService.ToolTip

  回复  引用  查看    
#37楼2008-06-16 22:22 | 房客      
老大,我VS2008 beta1 + silverlight2 beta2,在工具箱中没有 WatermarkedTextBox 这个控件呀。并且我在代码中也没有,不知道是不是还需要引用其它的程序集?
  回复  引用  查看    
#38楼[楼主]2008-06-16 22:29 | TerryLee      
@房客
Beta 2下移除了WatermarkedTextBox这个控件。。。

  回复  引用  查看    
#39楼2008-06-16 22:41 | 房客      
ToolTip也不见了,不过在WPF的System.Windows.Controls中可以看到该类,在Page.xaml.cs中,也引用了using System.Windows.Controls;
该程序集,但该控件还是不可以使用。不知何解?是不是连ToolTip也一并移除了?
这样优秀的控件为什么要移除呢?我想应该不会是涉及到安全因素吧,亦或者是有代替控件?

  回复  引用    
#40楼2008-06-25 12:06 | veinyf#163.com[未注册用户]
没有ToolTip, WatermarkedTextBox这两个控件,很好用为什么没有呢?
  回复  引用  查看    
#41楼[楼主]2008-06-26 09:55 | TerryLee      
@veinyf#163.com
ToolTip在Beta 2中只能通过ToolTipService来是指定,而WatermarkedTextBox这个控件之所以移除是因为在未来微软会给TextBox提供一个Watermark属性

http://www.cnblogs.com/Terrylee/archive/2008/06/18/upgrade-silverlight-application-from-beta1-to-beta2.html" target="_new">http://www.cnblogs.com/Terrylee/archive/2008/06/18/upgrade-silverlight-application-from-beta1-to-beta2.html

  回复  引用  查看    
#42楼2008-07-04 21:46 | 张跃      
beta2中好像那个watermarkedTextBox没有了
  回复  引用  查看    
#43楼[楼主]2008-07-06 22:20 | TerryLee      
@张跃
看看这篇文章吧,在Beta 2中移除了WatermarkedTextBox控件,但是不用担心,在RTM中对于TextBox控件上会添加Watermark属性。

http://www.cnblogs.com/Terrylee/archive/2008/06/18/upgrade-silverlight-application-from-beta1-to-beta2.html" target="_new">http://www.cnblogs.com/Terrylee/archive/2008/06/18/upgrade-silverlight-application-from-beta1-to-beta2.html

  回复  引用  查看    
#44楼2008-08-18 10:40 | 汉城      

谢谢楼主的中文教程。。。

  回复  引用  查看    
#45楼[楼主]2008-08-20 10:22 | TerryLee      
@汉城
不用客气。。

  回复  引用    
#46楼2008-08-26 20:23 | cocowool[未注册用户]
@tatung zhang
我也遇到了灾难性故障
只是我没有toggleBotton
也没有isThreeState
不知道是什么地方引起的

  回复  引用    
#47楼2008-09-17 13:45 | 游乐儿[未注册用户]
现在beta2又出了,但是两者的兼容性好像不是太好 ,如果有介绍希望载入,
----贪得无厌的学者

  回复  引用  查看    
#48楼2008-09-18 10:55 | 柳城之城      
来学习了。不过我现在用的还是vs2005。先做个记号吧。
  回复  引用  查看    
#49楼[楼主]2008-10-08 11:14 | TerryLee      
@游乐儿
再等几天吧,正式版就要出来了。

  回复  引用  查看    
#50楼[楼主]2008-10-08 11:15 | TerryLee      
@柳城之城
:-)

  回复  引用    
#51楼2008-10-16 09:49 | 001[未注册用户]
我用Silverlight2.0怎么没有WatermarkedTextBox这个控件?
  回复  引用    
#52楼2008-10-21 23:20 | straybird[未注册用户]
--引用--------------------------------------------------
001: 我用Silverlight2.0怎么没有WatermarkedTextBox这个控件?
--------------------------------------------------------
我也有同样的问题

  回复  引用  查看    
#53楼[楼主]2008-10-24 10:22 | TerryLee      
@001
@straybird
现在已经移除了该控件。

  回复  引用    
#54楼2008-11-06 01:15 | 冻结[未注册用户]
谢谢楼主
  回复  引用  查看    
#55楼[楼主]2008-11-06 20:23 | TerryLee      
@冻结
:)

  回复  引用  查看    
#56楼2008-11-11 16:50 | liuhaitao      
您好楼主,刚发布的2.0里,Button中是不是不能包含<Button.ToolTip>了啊,我找了半天没找到
  回复  引用  查看    
#57楼[楼主]2008-11-12 11:13 | TerryLee      
@liuhaitao
这么使用取消了,记得添加了一个ToolTipService之类的,你可以看一下:)

  回复  引用  查看    
#58楼2008-11-12 11:22 | liuhaitao      
ToolTipService我找到了 谢谢楼主

我刚开始研究silverlight,还有一个问题:我怎么让1.aspx引用1.xaml中的内容,让2.aspx引用2.xaml中的内容呢?我建了两个xaml文件,但是在clientBin目录下只生成一个xap文件,我引用完这个文件后,就只显示1.xaml中内容

  回复  引用    
#59楼2008-11-22 00:47 | 游乐儿[未注册用户]
哎哟,正式版里,是不是微软的叔叔忘记了给textbox加watermark阿
  回复  引用  查看    
#60楼[楼主]2008-11-22 10:08 | TerryLee      
@游乐儿
现在的确没有添加:)

  回复  引用  查看    
#61楼2008-12-20 21:36 | xuesky      
@游乐儿

不是忘记添加,由于和WPF兼容的考虑WatermarkedTextBox被移除了,网上找找,有那个控件的,不过处理成第三方控件了

  回复  引用  查看    
#62楼2008-12-20 21:38 | xuesky      
楼主,你处理SL控件设计是用Blend处理吗,有机会跟你学学,请教请教WCF的东西
  回复  引用  查看    
#63楼[楼主]2008-12-21 11:11 | TerryLee      
@xuesky
嗯,大多数情况下我都不会用Blend,而是直接写XAML。

没问题,有时间大家可以一起讨论WCF。

  回复  引用  查看    
#64楼2008-12-21 21:55 | xuesky      
@TerryLee
呵,谢谢

  回复  引用  查看    
#65楼[楼主]2008-12-23 10:22 | TerryLee      
@xuesky
不用客气:)

  回复  引用  查看    
#66楼2009-01-08 10:51 | love&tiger      
--引用--------------------------------------------------
liuhaitao: ToolTipService我找到了 谢谢楼主

我刚开始研究silverlight,还有一个问题:我怎么让1.aspx引用1.xaml中的内容,让2.aspx引用2.xaml中的内容呢?我建了两个xaml文件,但是在clientBin目录下只生成一个xap文件,我引用完这个文件后,就只显示1.xaml中内容

--------------------------------------------------------
楼主,我也想问问这个问题

  回复  引用  查看    
#67楼[楼主]2009-01-12 11:30 | TerryLee      
@love&amp;tiger
我专门写过一篇文章解释这个问题啊,Silverlight中实现用户控件切换。

  回复  引用    
#68楼2009-01-17 11:18 | 游客512[未注册用户]
在我的里面写入<Button.ToolTip>标记,提示"The attachable property 'ToolTip' was not found in type 'Button'",是不是我的silverLight安装不正确呀!!!
  回复  引用    
#69楼2009-02-07 22:02 | 无敌第三代[未注册用户]
<Button.ToolTip>在Silverlight 2正式版中已经不是这种写法了,可以是 :
<Button x:Name="uxMyButton" ToolTipService.ToolTip="這是一個按鈕" Content="按鈕1號"></Button>
也可以这样:
<Button x:Name="uxMyButton" Content="按鈕1號">
<ToolTipService.ToolTip>
<Image x:Name="uxMyImage" Source="Good.jpg" ></Image>
</ToolTipService.ToolTip>
</Button>

  回复  引用  查看    
#70楼2009-02-19 12:01 | 深山老林      
WatermarkedTextBox已经从Beta 2中去掉了,因为开发团队计划给TextBox添加一个Watermark属性,这么一来就没有必要再使用这个控件了,但遗憾的是在Beta 2中还没有完成这个属性的添加。
  回复  引用  查看    
#71楼2009-02-19 12:24 | 深山老林      
ToolTip似乎有问题,按照楼主的帖子一步步做下来,还是有错误,不会这个控件也被干掉了吧。
  回复  引用    
#72楼2009-03-07 02:37 | boygod1986[未注册用户]
博主,有个问题请教
ScrollViewer里面的textBlock 换成textBox ,然后通过什么方法能使在页面在运行时鼠标一点击textBox就能自动清除原来的"这仅仅是一个关于。。。的测试"这样的字消失为空,以等待用户在textBox里输入?

  回复  引用    
#73楼2009-03-07 02:40 | boygod1986[未注册用户]
你在43楼说textBox在RTM中会加上watermark属性,可是我这里没有啊....
  回复  引用    
#74楼2009-04-08 16:52 | johney[未注册用户]
初学silverlate就跑到楼主这边来啦。。
请教个问题:控件的大小,样式之类的,就只能通过width,height等等来指定么?没有其他方法?例如web里面的css样式。。

  回复  引用    
#76楼2009-04-20 16:39 | afaand20
请问如何在silverlight2中实现创建一个下拉菜单呀?并实现一定的响应!谢谢了先!!
  回复  引用    
#77楼2009-04-29 17:15 | xue[未注册用户]
编译出错了,“'ToolTip'was not found in type 'Button' " 请问是什么原因呢?

  回复  引用  查看    
#78楼2009-05-16 09:48 | 徐培华      
这些都是最简单的,请问哪里有专门这方面的资料可以参考呢?
电子版的有没有?
可以不可以发我一份??

  回复  引用  查看    
#79楼[楼主]2009-05-18 11:13 | TerryLee      
@xue
在RTW版本中有些变化,ToolTip由ToolTipService来提供。

  回复  引用  查看    
#80楼[楼主]2009-05-18 11:14 | TerryLee      
@徐培华
可以看Silverlight官方文档

// PS:小广告:http://www.dotneteye.cn/silverlight" target="_new">http://www.dotneteye.cn/silverlight

  回复  引用  查看    
#81楼2009-06-10 15:02 | xuesky      
@love&amp;tiger

@love&amp;tiger

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Silverlight InitParameters="control=SLCtrl1" Source="~/ClientBin/SilverlightApplication23.xap" ID="Silverlight1" runat="server" Height="100px" Width="100px">
</asp:Silverlight>
<asp:Silverlight InitParameters="control=SLCtrl2" Source="~/ClientBin/SilverlightApplication23.xap" ID="Silverlight2" runat="server" Height="100px" Width="100px">
</asp:Silverlight>

App.xaml, 修改Application_Startup:

private void Application_Startup(object sender, StartupEventArgs e)
{
// this.RootVisual = new Page();
if (e.InitParams["control"] == "SLCtrl1")
{
this.RootVisual = new SilverlightControl1();
}
else if (e.InitParams["control"] == "SLCtrl2")
{
this.RootVisual = new SilverlightControl2();
}
}



  回复  引用  查看    
#82楼2009-06-28 17:22 | 农夫三拳      
WatermarkedTextBox 在Silverlight 3没找到啊,是不是没了?也没有属性



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1095820




相关文章:

相关链接: