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


    在这篇文章中我们将为 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 数据

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

    6. 实现事件功能

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

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

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

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

    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 }
  • 相关阅读:
    C# 接口
    C# 多态
    C# 继承
    C# 封装
    动态规划:从新手到专家
    hduoj题目分类
    4.2 最邻近规则分类(K-Nearest Neighbor)KNN算法应用
    警惕自增的陷阱(++)
    五大常用算法之四:回溯法
    算法java实现--回溯法--图的m着色问题
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/2754479.html
Copyright © 2020-2023  润新知