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

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

 

下载整个项目打包

项目是详细的步骤:

1. 创建新项目

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

eugenedotnet creating windows phone 7 project

2. 为项目增加引用

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

eugenedotnet add Microsoft.Xml.Linq reference

3. 修改标题

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

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 地址后响应回车键。

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 数据

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

 

6. 实现事件功能

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

1private 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 类中使用如下应用语句:

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

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

01public 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}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值