Silverlight 5 beta新特性探索系列:3.Silverlight5中的文字增进控制【附带实例源码】

在Silverlight 5中新增了CharacterSpacing属性对文字间距进行控制,增加了RichTextBoxOverflow控件以灵活的对大量文字进行合理的排版显示。

一、CharacterSpacing属性

在Silverlight原来的版本中文字和文字之间并没有一个间距控制属性,这让某一些特殊的文字显示场合排版不易(比如杂志,电子报),在Silverlight 5中引入的CharacterSpacing属性就可以很好处理文字间距,它可用做TextBlock,RichTextBox,Label等文字控件,其具体文字间隔像素计算公式如下:字体大小*CharacterSpacing值/1000=字符间距像素值。比如:10号的字体,CharacterSpacing设置为500那么字符之间的间距=10*500/1000=5像素。现在我们通过以下XAML代码来看看如何设置CharacterSpacing属性:

<sdk:Label CharacterSpacing="200" Content="第一个LABEL控件" Height="28" Name="label1"
 HorizontalAlignment="Left" Margin="221,660,0,0" VerticalAlignment="Top" Width="156" />
<sdk:Label CharacterSpacing="500" Content="第一个LABEL控件" Height="28" Name="label2"
 HorizontalAlignment="Left" Margin="393,660,0,0" VerticalAlignment="Top" Width="156" />
<sdk:Label CharacterSpacing="-100" Content="第一个LABEL控件" Height="28" Name="label3"
 HorizontalAlignment="Left" Margin="583,660,0,0" VerticalAlignment="Top" Width="156" />

显示出来的具体效果如下:


二、RichTextBoxOverflow控件

在Silverlight 5中也引入了另外一个控件来支持复杂的文字排版:RichTextBoxOverflow控件,他将显示溢出RichTextBox显示区域的文字,如果RichTextBox的文字内容过多,则将多余的文字显示到OverflowContentTarget属性绑定到的RichTextBoxOverflow控件中去,如:OverflowContentTarget="{Binding ElementName=Rflow1}",如果一个这个RichTextBoxOverflow控件还是显示不完,则可以将多余的文字显示进入下一个OverflowContentTarget指定的RichTextBoxOverflow控件中去。下面我们来通过一个实例来看看如何使用RichTextBoxOverflow控件。

<RichTextBox HorizontalAlignment="Left" BorderThickness="0" Margin="12,0,0,0"
 Name="richTextBox1" VerticalAlignment="Top" Width="137"
 OverflowContentTarget="{Binding ElementName=Rflow1}" Height="697">
 <Paragraph>  惊蛰一过,春寒加剧。先是料料峭峭,继而雨季开始,时而淋淋漓漓,时而淅淅沥沥,天潮潮地湿湿,即连在梦里,也似乎有把伞撑着。而就凭一把伞,躲过一阵潇潇的冷雨,也躲不过整个雨季。连思想也都是潮润润的。每天回家,曲折穿过金门街到厦门街迷宫式的长巷短巷,雨里风里,走入霏霏令人更想入非非。想这样子的台北凄凄切切完全是黑白片的味道,想整个中国整部中国的历史无非是一张黑白片子,片头到片尾,一直是这样下着雨的。这种感觉,不知道是不是从安东尼奥尼那里来的。不过那—块土地是久违了,二十五年,四分之一的世纪,即使有雨,也隔着千山万山,千伞万伞。十五年,一切都断了,只有气候,只有气象报告还牵连在一起,大寒流从那块土地上弥天卷来,这种酷冷吾与古大陆分担。不能扑进她怀里,被她的裙边扫一扫也算是安慰孺慕之情吧。</Paragraph>
 <Paragraph>  这样想时,严寒里竟有一点温暖的感觉了。这样想时,他希望这些狭长的巷子永远延伸下去,他的思路也可以延伸下去,不是金门街到厦门街,而是金门到厦门。他是厦门人,至少是广义的厦门人,二十年来,不住在厦门,住在厦门街,算是嘲弄吧,也算是安慰。不过说到广义,他同样也是广义的江南人,常州人,南京人,川娃儿,五陵少年。杏花春雨江南,那是他的少年时代了。再过半个月就是清明。安东尼奥尼的镜头摇过去,摇过去又摇过来。残山剩水犹如是,皇天后土犹如是。纭纭黔首、纷纷黎民从北到南犹如是。那里面是中国吗?那里面当然还是中国永远是中国。只是杏花春雨已不再,牧童遥指已不再,剑门细雨渭城轻尘也都已不再。然则他日思夜梦的那片土地,究竟在哪里呢?在报纸的头条标题里吗?还是香港的谣言里?还是傅聪的黑键白键马恩聪的跳弓拨弦?还是安东尼奥尼的镜底勒马洲的望中?还是呢,故宫博物院的壁头和玻璃柜内,京戏的锣鼓声中太白和东坡的韵里?杏花,春雨,江南。六个方块字,或许那片土就在那里面。而无论赤县也好神州也好中国也好,变来变去,只要仓颉的灵感不灭,美丽的中文不老,那形象那磁石一般的向心力当必然长在。因为一个方块字是一个天地。太初有字,于是汉族的心灵他祖先的回忆和希望便有了寄托。譬如凭空写一个“雨”字,点点滴滴,滂滂沱沱,淅淅沥沥,一切云情雨意,就宛然其中了。视觉上的这种美感,岂是什么rain也好pluie也好所能满足?翻开一部《辞源》或《辞海》,金木水火土,各成世界,而一入“雨”部,古神州的天颜千变万化,便悉在望中,美丽的霜雪云霞,骇人的雷电霹雹,展露的无非是神的好脾气与坏脾气,气象台百读不厌门外汉百思不解的百科全书。</Paragraph>
 <Paragraph>  听听,那冷雨。看看,那冷雨。嗅嗅闻闻,那冷雨,舔舔吧,那冷雨。雨在他的伞上这城市百万人的伞上雨衣上屋上天线上,雨下在基隆港在防波堤海峡的船上,清明这季雨。雨是女性,应该最富于感性。雨气空而迷幻,细细嗅嗅,清清爽爽新新,有一点点薄荷的香味,浓的时候,竟发出草和树林之后特有的淡淡土腥气,也许那竟是蚯蚓的蜗牛的腥气吧,毕竟是惊蛰了啊。也许地上的地下的生命也许古中国层层叠叠的记忆皆蠢蠢而蠕,也许是植物的潜意识和梦紧,那腥气。</Paragraph>
 <Paragraph>  第三次去美国,在高高的丹佛他山居住了两年。美国的西部,多山多沙漠,千里干旱,天,蓝似安格罗萨克逊人的眼睛,地,红如印第安人的肌肤,云,却是罕见的白鸟,落基山簇簇耀目的雪峰上,很少飘云牵雾。一来高,二来干,三来森林线以上,杉柏也止步,中国诗词里“荡胸生层云”或是“商略黄昏雨”的意趣,是落基山上难睹的景象。落基山岭之胜,在石,在雪。那些奇岩怪石,相叠互倚,砌一场惊心动魄的雕塑展览,给太阳和千里的风看。那雪,白得虚虚幻幻,冷得清清醒醒,那股皑皑不绝一仰难尽的气势,压得人呼吸困难,心寒眸酸。不过要领略“白云回望合,青露入看无”的境界,仍须来中国。台湾湿度很高,最饶云气氛题雨意迷离的情调。两度夜宿溪头,树香沁鼻,宵寒袭肘,枕着润碧湿翠苍苍交叠的山影和万缀都歇的俱寂,仙人一样睡去。山中一夜饱雨,次晨醒来,在旭日未升的原始幽静中,冲着隔夜的寒气,踏着满地的断柯折枝和仍在流泻的细股雨水,一径探入森林的秘密,曲曲弯弯,步上山去。溪头的山,树密雾浓,蓊郁的水气从谷底冉冉升起,时稠时稀,蒸腾多姿,幻化无定,只能从雾破云开的空处,窥见乍现即隐的一峰半堑,要纵览全貌,几乎是不可能的。至少上山两次,只能在白茫茫里和溪头诸峰玩捉迷藏的游戏。回到台北,世人问起,除了笑而不答心自问,故作神秘之外,实际的印象,也无非山在虚无之间罢了。云绦烟绕,山隐水迢的中国风景,由来予人宋画的韵味。那天下也许是赵家的天下,那山水却是米家的山水。而究竟,是米氏父子下笔像中国的山水,还是中国的山水上只像宋画,恐怕是谁也说不清楚了吧?</Paragraph>
 <Paragraph>  雨不但可嗅,可亲,更可以听。听听那冷雨。听雨,只要不是石破天惊的台风暴雨,在听觉上总是一种美感。大陆上的秋天,无论是疏雨滴梧桐,或是骤雨打荷叶,听去总有一点凄凉,凄清,凄楚,于今在岛上回味,则在凄楚之外,再笼上一层凄迷了,饶你多少豪情侠气,怕也经不起三番五次的风吹雨打。一打少年听雨,红烛昏沉。再打中年听雨,客舟中江阔云低。三打白头听雨的僧庐下,这更是亡宋之痛,一颗敏感心灵的一生:楼上,江上,庙里,用冷冷的雨珠子串成。十年前,他曾在一场摧心折骨的鬼雨中迷失了自己。雨,该是一滴湿漓漓的灵魂,窗外在喊谁。</Paragraph>
</RichTextBox>
<RichTextBoxOverflow Name="Rflow1" BorderThickness="0" Margin="155,0,0,577"
 OverflowContentTarget="{Binding ElementName=Rflow2}" />
<RichTextBoxOverflow Name="Rflow2" BorderThickness="0" Margin="517,129,0,319"
 OverflowContentTarget="{Binding ElementName=Rflow3}" />
<RichTextBoxOverflow Name="Rflow3" BorderThickness="0" Margin="155,387,0,41" />
<Ellipse Height="252" HorizontalAlignment="Left" Fill="Green"
 Margin="165,129,0,0" Name="ellipse1" Stroke="Black"
 StrokeThickness="1" VerticalAlignment="Top" Width="346" />

Tips:如果想要在每一段落的开头留两个空格可以在段落开头输入两个中文全角的空格符如例所示。

本实例采用VS2010+Silverlight 5 beta编写,如需源码点击 SL5RichTextBox.zip 下载。具体的运行效果如下图所示:

时间: 2024-09-20 16:23:32

Silverlight 5 beta新特性探索系列:3.Silverlight5中的文字增进控制【附带实例源码】的相关文章

Silverlight 5 beta新特性探索系列:1.安装Silverlight 5 beta环境以及OOB模式下Silverlight 5 多窗口支持

Silverlight 5 beta版本总算于昨日放出,怀着激动的心情今天将开发环境更新为Silverlight 5 beta版本,并且接触Silverlight 5 beta的第一个新特性:OOB模式下的多窗口的弹出显示. 现在我们开始Silverlight 5 Beta版本的安装,首先需要为VS2010打一个VS2010 SP1补丁,然后我们再下载Silverlight 5 Beta Tools for Visual Studio SP1,一步一步安装完毕,最后我们下载Silverlight

Silverlight 5 beta新特性探索系列:2.在XAML代码中设置断点和Binding绑定调试【附带源码实例】

在Silverlight之前的版本中都不能在XAML代码中设置断点以跟踪调试的,在Silverlight 5 beta版中我们将能够为Binding数据的XAML代码设置断点以跟踪调试相应的数据绑定过程. 首先我们新建一个Silverlight 5应用程序,然后准备后台数据代码如下以绑定一个DataGrid控件. public MainPage() { InitializeComponent(); List<CityInformation> cityList=new List<CityI

Silverlight 5 beta新特性探索系列:8.Silverlight 5中自定义扩展标记

在Silverlight 5中新增了自定义扩展标记,它通过继承于 MarkupExtension 类,重载该类中的ProvideValue方法以判断得到相应的返回值,以设置被绑定控件的属性. 下面我们通过一个最为简单的实例来理解自定义扩展标记是如何工作的. 第一步:新建一个UserMarkExtension.cs类,注意UserMark(扩展标记名)+Extension.cs(固定的后缀)=UserMarkExtension.cs 第二步:设置3个可被访问的属性标签LBText,LBWidth,

Silverlight 5 beta新特性探索系列:6.Silverlight 5新增低延迟声音效果类SoundEffect.支持wav音乐格式【附带源码实例】

在Silverlight 5中新增了一个SoundEffect类和SoundEffectInstance类用以加载wav格式的音乐,这样可以很及时的为动画添加音效. 现在我们看如何使用这两个类来控制播放wav音乐,首先引入mav音乐格式的文件(音频采样大小必须为16或者8位不能是24位,采用PCM编码,22.5, 44.1 or 48khz的采样率)如下图属性: 其次将引入的wav格式音乐文件在项目中右键点击其属性设置其"生成操作"为"内容",如下图所示: 现在我们

Silverlight 5 beta新特性探索系列:7.结合上层元素属性绑定和Style Setter上的绑定

   在Silverlight 5中添加了相对上层元素属性的绑定,还有Style Setter也可以绑定数据.         一.相对上层元素属性的绑定        它是在元素内部的子孙级元素中的某一些属性可以绑定为祖先级元素的某一些属性.比如说再一个ListBox的Tag元素值为:"这是第一个父级绑定",在ListBox.Templete下面添加一个TextBlock元素的Text属性设置为 <TextBlock Text="{Binding Tag,Relati

Silverlight 5 beta新特性探索系列:4.Silverlight 5 beta中鼠标双击/鼠标多重点击的实现

在Silverlight 5中新增了鼠标双击和多重点击的实现,当然在这里包括鼠标左键和鼠标右键的双击,多重点击.在Silverlight 5的MouseButtonEventArgs类中新增了一个属性名为ClickCount:获取到触发事件源在单位时间内被点击的次数(注意:单位时间是由操作系统的"控制面板"-->"鼠标"-->"双击速度"设置的). 下面我们来看一个实例以判断是否双击还是多重点击,首先我们看实例的XAML代码: <

Silverlight 5 RC新特性探索系列:14.Silverlight 5 RC 对字体呈现的改进

     在Silverlight 5 RC版本中对字体呈现做出了比较大的优化,它现在新增了一个类TextOptions,其内部有三个依赖属性TextFormattingMode.TextHintingMode.TextRenderingMode.对字体的呈现模式进行了定义.    1.TextFormattingMode         它有两种格式化模式,是对字体的格式化进行设置         1.1 Display:它使用度量来格式化字体和符号,会让字体显示得更加清晰,        

Silverlight 5 RC新特性探索系列:13.Silverlight 5 RC 新增对并行任务库(TPL)的支持

     在Silverlight 5 RC版本中新增了对并行任务库(Task Parallel Library)的支持,Task Parallel Library简称TPL,它是指一个或者多个任务同时运行,类似线程或者线程池.在本例中将会以并行任务库和异步获取数据进行对比.  首先新建一个Silverlight 5项目,在其Web项目中添加一个新的xml文件helloWorld.xml.编写代码如下: <?xml version="1.0" encoding="utf

Silverlight 5 RC新特性探索系列:12.Silverlight 5 RC 窗口模式下访问自定义DLL和WIN32 API

  在Silverlight 5 RC版本中针对访问权限进行了相应的提升,它的项目属性中新增了一个复选框"在浏览器内运行时需要提升的信任",如下图:          它将为在浏览器模式下运行的应用程序提升一些访问权限,例如我的上篇SaveFileDialog保存文件指定默认名称---OpenFileDialog打开文件指定默认路径就需要提升权限.另外在其OOB模式下也进行了相应的提升,比如访问WIN 32 API,或者访问在C:\Windows\System32目录下的自己编写的DL