一步一步学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阅读器界面如下:

定义一个三行两列的Grid,分别放置顶部信息、分割线和下面的内容区:

<Grid.RowDefinitions>
<RowDefinition Height="50"></RowDefinition>
<RowDefinition Height="20"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="240"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>

设计顶部输入区域,对Grid第一行做合并,并且放置一个StackPanel:

<StackPanel x:Name="Header" Orientation="Horizontal"
Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">
<Image Source="Rss.png" Width="32" Height="32" Margin="10 0 10 0"></Image>
<Border Style="{StaticResource titleBorder}">
<TextBlock Text="基于Silverlight的RSS阅读器" Foreground="#FFFFFF"
VerticalAlignment="Center" Margin="12 0 0 0"></TextBlock>
</Border>
<WatermarkedTextBox x:Name="feedAddress" Width="300" Height="35"
FontSize="16" Margin="10 0 10 0">
<WatermarkedTextBox.Watermark>
<TextBlock Text="请输入有效的RSS地址" VerticalAlignment="Center"
Foreground="#FBA430" FontSize="16"></TextBlock>
</WatermarkedTextBox.Watermark>
</WatermarkedTextBox>
<Button x:Name="displayButton" Style="{StaticResource button}"
Content="显 示" Click="displayButton_Click"></Button>
<Button x:Name="fullScreenButton" Style="{StaticResource button}"
Content="全 屏" Click="fullScreenButton_Click"></Button>
</StackPanel>

鉴于两个按钮的风格一致,在App.xaml中定义一个button样式:

<Style x:Key="button" TargetType="Button">
<Setter Property="Width" Value="100"></Setter>
<Setter Property="Height" Value="35"></Setter>
<Setter Property="Background" Value="#FBA430"></Setter>
<Setter Property="Foreground" Value="#FBA430"></Setter>
<Setter Property="FontSize" Value="16"></Setter>
</Style>
<Style x:Key="titleBorder" TargetType="Border">
<Setter Property="CornerRadius" Value="10"></Setter>
<Setter Property="Width" Value="220"></Setter>
<Setter Property="Height" Value="40"></Setter>
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0">
<GradientStop Color="#FBA430" Offset="0.0" />
<GradientStop Color="#FEF4E7" Offset="0.5" />
<GradientStop Color="#FBA430" Offset="1.0" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>

定义分割线,用Rectangle来表示:

<StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center">
<Rectangle Style="{StaticResource rectangle}"/>
</StackPanel>

为了显示出渐变的样式,我们定义样式如下:

<Style x:Key="rectangle" TargetType="Rectangle">
<Setter Property="Width" Value="780"></Setter>
<Setter Property="Height" Value="5"></Setter>
<Setter Property="RadiusX" Value="3"></Setter>
<Setter Property="RadiusY" Value="3"></Setter>
<Setter Property="Fill">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0">
<GradientStop Color="#FEF4E7" Offset="0.0" />
<GradientStop Color="#FBA430" Offset="1.0" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>

定义左边的列表区,用ListBox来显示,并且定义ItemTemplate:

<ListBox x:Name="PostsList" Grid.Column="0" Grid.Row="2"
Margin="10 5 5 10" SelectionChanged="PostsList_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title.Text}"
TextWrapping="Wrap" Width="200"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

最后定义右边的详细信息区域,在StackPanel中垂直放置三个Border:

<StackPanel x:Name="Detail" Grid.Column="1" Grid.Row="2">
<Border CornerRadius="10" Background="#CDFCAE" Margin="10 5 10 10"
Width="540" Height="40">
<TextBlock Text="{Binding Title.Text}" TextWrapping="Wrap"
VerticalAlignment="Center" Foreground="Red"/>
</Border>
<Border CornerRadius="10" Background="#CDFCAE" Margin="10 5 10 10"
Width="540" Height="300">
<TextBlock Text="{Binding Summary.Text}" TextWrapping="Wrap"/>
</Border>
<Border CornerRadius="10" Background="#CDFCAE" Margin="10 5 10 10"
Width="540" Height="40">
<StackPanel Orientation="Horizontal">
<TextBlock Text="评论日期:" TextWrapping="Wrap"
Foreground="Red" VerticalAlignment="Center"/>
<TextBlock Text="{Binding PublishDate}" TextWrapping="Wrap"
Foreground="Red" VerticalAlignment="Center"/>
</StackPanel>
</Border>
</StackPanel>

界面布局到此大功告成。

实现功能

下面实现数据的获取,采用WebRequest来实现,也可以使用其他方式。

/// <summary>
/// 显示列表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void displayButton_Click(object sender, RoutedEventArgs e)
{
Uri uri = new Uri(feedAddress.Text);
WebRequest request = (WebRequest)WebRequest.Create(uri);
request.BeginGetResponse(new AsyncCallback(responseReady), request);
} void responseReady(IAsyncResult asyncResult)
{
WebRequest request = (WebRequest)asyncResult.AsyncState;
WebResponse response = (WebResponse)request.EndGetResponse(asyncResult); XmlReader reader = XmlReader.Create(response.GetResponseStream());
SyndicationFeed feed = SyndicationFeed.Load(reader); PostsList.ItemsSource = feed.Items;
}

显示详细信息:

/// <summary>
/// 查看详细信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PostsList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
SyndicationItem item = PostsList.SelectedItem as SyndicationItem; Detail.DataContext = item;
}

实现全屏按钮的代码:

/// <summary>
/// 全屏显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void fullScreenButton_Click(object sender, RoutedEventArgs e)
{
Content contentObject = Application.Current.Host.Content;
contentObject.IsFullScreen = !contentObject.IsFullScreen;
}

运行效果

运行后界面如下:

输入豆瓣的最新影评Feed:

选择其中一项后,将显示出详细信息:

结束语

本文对前面十七篇内容做了一个小结,并开发出了一个简易RSS阅读器,你可以从这里下载本文示例代码。

下一篇:一步一步学Silverlight 2系列(19):如何在Silverlight中与HTML DOM交互(上)

作者:TerryLee
出处:http://terrylee.cnblogs.com 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 

一步一步学Silverlight 2系列(18):综合实例之RSS阅读器的更多相关文章

  1. 一步一步学Silverlight 2系列文章

    概述 由TerryLee编写的<Silverlight 2完美征程>一书,已经上市,在该系列文章的基础上补充了大量的内容,敬请关注.官方网站:http://www.dotneteye.cn ...

  2. 一步一步学Silverlight 2系列(17):数据与通信之ADO.NET Data Services

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  3. 一步一步学Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  4. 一步一步学Silverlight 2系列(31):图形图像综合实例—实现水中倒影效果

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  5. 一步一步学Silverlight 2系列(30):使用Transform实现更炫的效果(下)

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  6. 一步一步学Silverlight 2系列(29):使用Transform实现更炫的效果(上)

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  7. 一步一步学Silverlight 2系列(28):图片处理

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  8. 一步一步学Silverlight 2系列(27):使用Brush进行填充

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 一步一步学Silverlight 2系列(26):基本图形

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

随机推荐

  1. hdu 4091 Zombie’s Treasure Chest 贪心+枚举

    转自:http://blog.csdn.net/a601025382s/article/details/12308193 题意: 输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝 ...

  2. 使用Sharesdk实现第三方平台登录(qq,新浪微博)

    首先到sharesdk开放píng台下载demo ,以下要用到的文件来自于 simple里面 第一步:导入官方的jar包    第二步:添加ShareSDK.xml文件并修改相关píng台key  第 ...

  3. Delphi使用进行post数据时超时设置

    因项目需要进行http的post提交数据,开始时用indy的idHttp组件,但是测试时发现当网络中断(如拔掉网线),idHttp的超时设置无效果,要等20秒才提示超时(参考网上的做法,将indy9升 ...

  4. ZOJ - 4016 Mergeable Stack (STL 双向链表)

    [传送门]http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4016 [题目大意]初始有n个空栈,现在有如下三种操作: (1) ...

  5. 读取编码器信息Python2.7和Python3.3版本差异及解决,一次订阅多次调用callback的解决

    1. Python3.3以字节类型返回编码器信息,b'...',BUF: b'\xc3KOO\x00OO\x00OO\x00OO\x00OO\x00\x03\x00\x00\x00\x00\x99R\ ...

  6. javaWeb_Request对象

    首先说一下Http协议 一.Http协议的概念及作用 1.什么是HTTP协议? (HTTP,HyperText Transfer Protocol)超文本传输协议, 是互联网上应用最为广泛的一种网络协 ...

  7. springBoot 跨域处理

    首先喝水不忘挖井人,博客参考:https://www.cnblogs.com/nananana/p/8492185.html 方式一:新增一个configration类 或 在Application中 ...

  8. 成长笔记 - mysql-5.5.25-winx64安装步骤(及密码修改问题)

    操作系统:Windows 7 64位 下载地址: http://download.mysql.cn/src/2012/0602/5611.html 1. 将mysql-5.5.25-winx64.zi ...

  9. kafka-0.8.1.1总结

    文件夹 一.         基础篇 1.     开篇说明 2.     概念说明 3.     配置说明 4.     znode分类 5.     kafka协议分类 6.     Kafka线 ...

  10. python远程访问hive

    #!/usr/bin/pythonimport syssys.path.append('/home/zhoujie/Downloads/hive-0.7.0-cdh3u0/lib/py')from h ...