.NEt专家博客!
【李会军】一步一步学Silverlight 2系列(18):综合实例之RSS阅读器
概述
Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入Silverlight 2开发
本文将综合前面十七篇讲过的界面布局、样式、控件模板、数据绑定、网络通信等几个方面,来开发一个综合实例——简易RSS阅读器。
界面布局
我们最终完成的RSS阅读器界面如下:
:hSr
F:A8x0
yJLx
c0
定义一个三行两列的Grid,分别放置顶部信息、分割线和下面的内容区:
<Grid.RowDefinitions>
5\1`m{:c W0<RowDefinitionHeight="50"></RowDefinition>ITPUB个人空间#Br4SzoA+n#x
<RowDefinitionHeight="20"></RowDefinition>ITPUB个人空间 d;z4Yh)d
<RowDefinitionHeight="*"></RowDefinition>ITPUB个人空间m @7C2g:@J$SF
</Grid.RowDefinitions>ITPUB个人空间Gnv9J kN
<Grid.ColumnDefinitions>
.v*j+e`ky#P(s;r0<ColumnDefinitionWidth="240"></ColumnDefinition>ITPUB个人空间h4W5V4pl`"Y5{N
<ColumnDefinitionWidth="*"></ColumnDefinition>
#_dc*m;`4AzR0</Grid.ColumnDefinitions>
设计顶部输入区域,对Grid第一行做合并,并且放置一个StackPanel:
<StackPanelx:Name="Header"Orientation="Horizontal"ITPUB个人空间0z!F#r#r7mP
Grid.Row="0"Grid.Column="0"Grid.ColumnSpan="2">
fG#LbwTl0<ImageSource="Rss.png"Width="32"Height="32"Margin="10 0 10 0"></Image>ITPUB个人空间.mk-K)cF'a]EM @
<BorderStyle="{StaticResourcetitleBorder}">
z,sw\#U`'sVR'kF0<TextBlockText="基于Silverlight的RSS阅读器"Foreground="#FFFFFF"ITPUB个人空间n)CI.Ci5k5^5f
VerticalAlignment="Center"Margin="12 0 0 0"></TextBlock>ITPUB个人空间/?V!b'gM o m0Ky
</Border>ITPUB个人空间b \;]S&G{0k
<WatermarkedTextBoxx:Name="feedAddress"Width="300"Height="35"ITPUB个人空间2xK`MHj
FontSize="16"Margin="10 0 10 0">ITPUB个人空间G4R1A~0K _
<WatermarkedTextBox.Watermark>
3uD["if/L0<TextBlockText="请输入有效的RSS地址"VerticalAlignment="Center"
+DYyzYJHx(I0Foreground="#FBA430"FontSize="16"></TextBlock>ITPUB个人空间 h@6scdzHYf
</WatermarkedTextBox.Watermark>
C+k"K|7o PxS:ob Mv0</WatermarkedTextBox>ITPUB个人空间J(vT3HuuFv
<Buttonx:Name="displayButton"Style="{StaticResourcebutton}"ITPUB个人空间Jf-F&P!L
Content="显 示"Click="displayButton_Click"></Button>
s}XY?4h0<Buttonx:Name="fullScreenButton"Style="{StaticResourcebutton}"ITPUB个人空间6D,j0N?)v-Y"mnib
Content="全 屏"Click="fullScreenButton_Click"></Button>
W{uRt9DS`~0</StackPanel>
鉴于两个按钮的风格一致,在App.xaml中定义一个button样式:
<Style.x:Key="button"TargetType="Button">ITPUB个人空间*\|a:c]*t2Z5]\3~定义分割线,用Rectangle来表示:
<SetterProperty="Width"Value="100"></Setter>
+X6Jk7Ihr |1cp0<SetterProperty="Height"Value="35"></Setter>
(CG E_{/Z4`_0<SetterProperty="Background"Value="#FBA430"></Setter>ITPUB个人空间3B ^vBvh o~
<SetterProperty="Foreground"Value="#FBA430"></Setter>
-cJ~#g-ES"A0@vP0<SetterProperty="FontSize"Value="16"></Setter>
5{ ZKjS8@m0</Style>ITPUB个人空间5bx"L9lY$L
<Style.x:Key="titleBorder"TargetType="Border">
4rKMx&B1v4wi0<SetterProperty="CornerRadius"Value="10"></Setter>ITPUB个人空间+Z+d(D[G&F]T
<SetterProperty="Width"Value="220"></Setter>ITPUB个人空间 kV:a Xmt5]
<SetterProperty="Height"Value="40"></Setter>
2x7b W|\ {,J0<SetterProperty="Background">ITPUB个人空间-}.L4GG*HX
<Setter.Value>
4A7SU3Q#_9^:n#h0<LinearGradientBrushStartPoint="0,0">
2m6G5P%kOF&V'sC0<GradientStopColor="#FBA430"Offset="0.0" />
,_O2H#{kX1b0<GradientStopColor="#FEF4E7"Offset="0.5" />
N(u \&^zp0<GradientStopColor="#FBA430"Offset="1.0" />ITPUB个人空间:lFw%wZ0`
</LinearGradientBrush>
$p h-Hv5ho0</Setter.Value>
Wd&KF&b0</Setter>
-i!] w2nu0</Style>
<StackPanelGrid.Row="1"Grid.Column="0"Grid.ColumnSpan="2"VerticalAlignment="Center">ITPUB个人空间u%f/w,Ex^VR?
<RectangleStyle="{StaticResourcerectangle}"/>ITPUB个人空间7ZT[ zhH+C/@w
</StackPanel>
为了显示出渐变的样式,我们定义样式如下:
<Style.x:Key="rectangle"TargetType="Rectangle">ITPUB个人空间6b$]]d M0WIN
<SetterProperty="Width"Value="780"></Setter>ITPUB个人空间 u;Fr!v2A\
<SetterProperty="Height"Value="5"></Setter>
-o T*Ld!?B#h0<SetterProperty="RadiusX"Value="3"></Setter>ITPUB个人空间/h-Fp9T6p J @*kA#T|U
<SetterProperty="RadiusY"Value="3"></Setter>ITPUB个人空间ImH/I+_l7[;w
<SetterProperty="Fill">ITPUB个人空间p] AR{2\/f5q
<Setter.Value>
;I T0jZB(k2j0<LinearGradientBrushStartPoint="0,0">
@;i%G8{.cT0<GradientStopColor="#FEF4E7"Offset="0.0" />ITPUB个人空间!~,k;~Yn9I/I!{E6s
<GradientStopColor="#FBA430"Offset="1.0" />
6P!~1I)q*D0</LinearGradientBrush>ITPUB个人空间*y Q~;t_ M)A
</Setter.Value>