概述

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阅读器,你可以从这里下载本文示例代码。

本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/67256

本文出自 51CTO.COM技术博客

转载于:https://www.cnblogs.com/GT_Andy/archive/2009/07/28/1922018.html

(18):Silverlight 2 综合实例之RSS阅读器相关推荐

  1. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

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

  2. PHP 实例 - AJAX RSS 阅读器

    PHP 实例 - AJAX RSS 阅读器 RSS 阅读器用于阅读 RSS Feed. AJAX RSS 阅读器 在下面的实例中,我们将演示一个 RSS 阅读器,通过它,来自 RSS 的内容在网页不进 ...

  3. Windows Phone开发基础(11)实现一个RSS阅读器

    实现一个RSS阅读器,通过你输入的RSS地址来获取RSS的信息列表和查看RSS文章中的详细内容.RSS阅读器是使用了WebClient类来获取网络上的RSS的信息,然后再转化为自己定义好的RSS实体类 ...

  4. rss阅读器保存html文件,轻量级RSS阅读器网页版:selfoss安装教程

    说明:关于RSS阅读器,我们知道的有Feedbin.FreshRSS等,功能都挺强大的,这里就再介绍个轻量级的RSS阅读器selfoss,使用起来是非常简单的,界面颜值也还不错,支持很多种订阅和网站, ...

  5. 用JSP实现基于Web的RSS阅读器

    2019独角兽企业重金招聘Python工程师标准>>> 一 RSS介绍 根据维基百科(http://zh.wikipedia.org/wiki/RSS)的定义,"RSS是一 ...

  6. Android开发RSS阅读器

    RSS阅读器的Logo: RSS阅读器是一种软件或是说一个程序,这种软件可以自由读取RSS和Atom两种规范格式的文档,且这种读取RSS和Atom文档的软件有多个版本,由不同的人或公司开发,有着不同的 ...

  7. android rss_Android RSS阅读器应用程序

    android rss In this tutorial, we'll be discussing Android RSS Reader and develop an RSS Feed Reader ...

  8. 使用百度Clouda框架创建RSS阅读器应用

    什么是Clouda? Clouda是百度的一款开源NodeJs轻应用框架,拥有百度强大的技术支持,实现快速开发.优化SEO.易部署等特性,提供简单易用的依赖管理模块化开发环境. 详细信息,请猛击Clo ...

  9. 计算机毕业设计Android新闻RSS阅读器客户端app(源码+系统+mysql数据库+Lw文档)

    项目介绍 基于Google Android 平台的新闻阅读器的开发过程.首先根据Google android market上面的数据,对给予Google android 移动平台的新闻阅读器进行了需求 ...

最新文章

  1. MPB:南农成艳芬组-瘤胃微生物体外发酵过程与注意事项
  2. python --闭包学习
  3. cv2.fillConvexPoly填充多边形
  4. mysql服务重启后不见了_一次诡异的Mysql服务不断重启故障排查
  5. MVC源码学习之AuthorizeAttribute
  6. 关于string.Template的简单介绍
  7. 前端学习(2182):keep-alive及其他问题
  8. show一下自己的文档编写功底
  9. [大学回忆录-思想]一种能力的培养
  10. python自动化之djangoform表单验证
  11. 计算几何-判断两条线段是否相交
  12. (转载)网络互联参考模型(详解)
  13. Python 数据挖掘(一) 模块安装部署 numpy等
  14. 各种学习网址总结-程序猿值得拥有 持更
  15. 银行柜员网申计算机水平要求高吗,银行笔试通过率:看你网申如何?
  16. 运营Tumblr的几个建议-教你成为tumblr达人
  17. 从药价高昂引申的思考
  18. 前后端分离项目,有什么优缺点
  19. JS数组方法shift()、unshift()用法实例分析
  20. javashop技术培训总结,架构介绍,Eop核心机制

热门文章

  1. python access 源码_连接的微软Access数据库,这是一个轻量级的Python模块(MDB格式)...
  2. html+字体图标找不到字体,bootstrap中不显示字体图标问题怎么解决?
  3. vue delete删除json数组_vue面试题总结(二)
  4. python模块如何导入解释器_无法从嵌入式解释器导入内置模块(仅限Windows)
  5. 计算机虚拟现实技术论文好写吗,虚拟现实技术的论文
  6. kafka是存储到本地磁盘么_Kafka 中的消息存储在磁盘上的目录布局是怎样的?
  7. 没有bug队——加贝——Python 练习实例 35,36
  8. flatform installer web 安装php_web安装平台-微软web服务器配置安装工具(Web Platform Installer)5.0 官方最新版-东坡下载...
  9. mongodb java数组_MongoDB 基础java数据类型
  10. php 解析java map,java_java遍历Map的几种方法分析,本文实例分析了java遍历Map的几 - phpStudy...