在这篇文章中我们将为 Windows Phone 7 手机创建一个简单的 RSS (Really Simple Syndication) 阅读器。用户界面包含一个文本输入框用于输入 RSS 地址,以及一个 ListBox 用于显示 RSS 条目,如下图所示:

下载整个项目打包

项目是详细的步骤:

1. 创建新项目

首先我们要创建一个新项目,打开 Visual Studio 2010 -> File -> New Project -> 选择 Windows Phone Application ,如下图所示:

2. 为项目增加引用

接下来你需要增加对 Microsoft.Xml.Linq 这个 XML 解析库的应用,右击项目下的引用库,人然后选择添加引用,在 .NET 的 tab 页中你将找到 Microsoft.Xml.Linq, 点击 OK 按钮,如下图所示:

3. 修改标题

这个步骤不是必须的,但我还是决定加进来,在这个步骤中我们简单的修改 TitleGrid 元素用来指定应用程序的标题

view source print?
1 <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="24,24,0,12">
2     <TextBlock x:Name="ApplicationTitle" Text="EUGENEDOTNET.COM" Margin="0,0,0,0" Style="{StaticResource PhoneTextNormalStyle}"/>
3     <TextBlock x:Name="PageTitle" Text="RSS Reader" Margin="-3,-8,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
4 </StackPanel>

4. 修改 ContentGrid

ContentGrid 将包含应用程序中所需的 UI 元素,最基本的包括下面三项:

  • TextBox 用于输入 RSS 网址
  • Button 用于触发读取 RSS 信息的事件
  • ListBox 用于显示 RSS 数据结果,包含标题和链接

需要注意的是按钮的点击事件是通过 XAML 中定义的,另外 Windows Phone 7 有一个新的 InputScope 特性用于简化输入框直接输入 URL 地址后响应回车键。

view source print?
01 <Grid x:Name="ContentGrid" Grid.Row="1">
02   
03     <Grid.RowDefinitions>
04         <RowDefinition Height="70" />
05         <RowDefinition Height="Auto" />
06     </Grid.RowDefinitions>
07   
08     <TextBox Name="tbRSSFeedURL" Grid.Row="0" Text=""  Width="350" Margin="10,0,10,0" HorizontalAlignment="Left">
09   
10         <TextBox.InputScope>
11             <InputScope>
12                 <InputScopeName NameValue="Url" />
13             </InputScope>
14         </TextBox.InputScope>
15   
16     </TextBox>
17     <Button Name="btnReadFeed" Grid.Row="0" Content="Read" Width="110" Margin="10,0,10,0" HorizontalAlignment="Right" Click="btnReadFeed_Click" />
18   
19     <ScrollViewer Width="440" Height="530" Grid.Row="1" Margin="10, 20, 0, 0">
20         <ListBox Name="listboxRSSFeedItems" Width="440" Height="530">
21   
22             <ListBox.ItemTemplate>
23                 <DataTemplate>
24                     <Grid>
25                         <Grid.RowDefinitions>
26                             <RowDefinition Height="Auto" />
27   
28                             <RowDefinition Height="Auto" />
29                         </Grid.RowDefinitions>
30                         <TextBlock TextWrapping="Wrap" Text="{Binding Title}" Grid.Row="0" FontSize="24" HorizontalAlignment="Left" />
31   
32                         <HyperlinkButton Content="Link to details" NavigateUri="{Binding Link}" HorizontalAlignment="Left" Grid.Row="1"  Margin="0,0,0,30" />
33   
34                     </Grid>
35                 </DataTemplate>
36             </ListBox.ItemTemplate>
37         </ListBox>
38     </ScrollViewer>
39 </Grid>

5. 为 RSS 条目创建一个单独的类

现在我们只需要创建一个新的容器类用来保存 RSS 数据

view source print?
1 public class RSSFeedItem
2 {
3     public string Title { get; set; }
4     public Uri URL { get; set; }
5 }

6. 实现事件功能

接下来我们需要为 Read 按钮编写事件处理程序,我们需要创建一个新的 URI 对象并传递给 ReadRss 方法

view source print?
1 private void btnReadFeed_Click(object sender, RoutedEventArgs e)
2 {
3     if (!string.IsNullOrEmpty(tbRSSFeedURL.Text))
4     {
5         ReadRss(new Uri(tbRSSFeedURL.Text, UriKind.Absolute));
6     }
7 }

7. 实现应用程序逻辑

需要确保在 MainPage.xaml 类中使用如下应用语句:

view source print?
1 using System.Xml.Linq; // for reading RSS using Linq-To-XML
2 using System.IO; // for Stream object

接下来你需要实现一个 ReadRss 方法,接收一个 URI 参数。如果请求成功的话,应用将处理返回的 RSS 信息并将每个条目放到 ListBox 中

view source print?
01 public void ReadRss(Uri rssUri)
02 {
03     WebClient wclient = new WebClient();
04    
05     wclient.OpenReadCompleted += (sender, e) =>
06     {
07         if (e.Error != null)
08             return;
09    
10         Stream str = e.Result;
11         XDocument xdoc = XDocument.Load(str);
12    
13         // take 10 first results
14         List<RSSFeedItem> rssFeedItems = (from item in xdoc.Descendants("item")
15                                             select new RSSFeedItem()
16                                             {
17                                                 Title = item.Element("title").Value,
18                                                 URL = new Uri(item.Element("link").Value, UriKind.Absolute),
19                                             }).Take(10).ToList();
20         // close
21         str.Close();
22    
23         // add results to listbox
24         listboxRSSFeedItems.Items.Clear();
25         rssFeedItems.ForEach(item => listboxRSSFeedItems.Items.Add(item));
26     };
27     wclient.OpenReadAsync(rssUri);
28 }

WINDOWSPHONE STUDY1:创建一个 Windows Phone 7 下的简单 RSS 阅读器相关推荐

  1. C#创建一个Windows Service

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  2. 创建一个Windows Service应用程序

    创建一个Windows Service应用程序 下载本文代码 见资源 正是由于.NET Framework的出现,才使你能够构建出在系统重新启动时自动运行的.无人参与的(unattended)应用程序 ...

  3. 使用C++代码创建一个Windows桌面应用程序

    下面六星教育整理使用C++代码创建一个Windows桌面应用程序,供大家学习参考. WinMain函数 Windows应用程序的唯一程序入口. 函数原型 int WINAPI WinMain { HI ...

  4. 利用c语言在屏幕上画出窗口,第一课:创建一个windows窗口

    跟我一起学图形编程                               作者:姚明联系方式: 欢迎使用我的图形学教程.我是计算机专业的学生,对图形图像技术有浓厚的兴趣,就读期间广泛的涉及相关知 ...

  5. 创建一个windows服务的小程序及注意事项

    1,首先在vs中创建一个windows服务项目 会生成一个Service1.cs的文件  打开该文件 切换到代码视图  有两个方法   OnStart(string[] args)和OnStop()方 ...

  6. 创建一个JFrame,可下拉选择显示字符串和图片

    创建一个JFrame,可下拉选择显示字符串和图片 import java.awt.*; import java.awt.event.*; import java.io.*; import javax. ...

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

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

  8. Linux与Windows双系统下的Grub引导管理器安装。

    转载自品略图书馆 http://www.pinlue.com/article/2020/04/0710/1410126301133.html 大多数人日常工作所用的系统是Windows,如果想尝试或者 ...

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

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

最新文章

  1. linux centos7 设置 grub2
  2. retinaface onnx
  3. risc-v 操作系统教程
  4. 成功解决ValueError: setting an array element with a sequence.
  5. Synchronized结合Java Object对象中的 wait,notify,notifyAll
  6. c语言 error 9,C语言求助(_) c:9: error: syntax error before '[' token
  7. 服务器漏洞处理_wildfly禁用https和8443端口
  8. CSS基础「二」复合选择器 / 元素显示模式 / 背景 / 三大特性
  9. oracle concat和,concat和||之間是否存在性能差異?在oracle
  10. 选择排序两层遍历的目的
  11. 钢铁雄心II HOI2 作弊码合辑
  12. htcd816+android密码,详细的HTC Desire 816解锁教程
  13. javascript——构造函数和原型对象
  14. 软件测试语句覆盖,软件测试中的语句覆盖,分支覆盖,条件覆盖以及路径覆盖...
  15. python三维图形等高线_python等高线
  16. 几何公差基础知识之平面度
  17. jsp如何打开本地html文件怎么打开,jsp文件怎么打开,教您电脑怎么打开jsp文件
  18. android三星定位闪退,三星手机闪退问题7种修复方法
  19. P3437 [POI2006]TET-Tetris 3D
  20. 贪吃蛇大作战【C++游戏】

热门文章

  1. IOS 滑动指示导航栏 渐变
  2. 2018CTF大赛学习
  3. 四个步骤实现层级清晰的导航栏
  4. MySQL数据库触发器(trigger)
  5. Handler线程间通信
  6. nginx 403 forbidden 二种原因
  7. C++ 调用lib 和 dll的 方法 及 动态库DLL与静态库lib的区别
  8. 使用 PHPMailer 发送邮件
  9. 数据分析中会常犯哪些错误,如何解决的?
  10. Stimulsoft Reports.Net基础教程(十):创建图表报表②