zoukankan      html  css  js  c++  java
  • 一个简易的 Windows 8 RSS 阅读器

    先上运行截图:

    简单说明:右侧主要内容的显示使用了浏览器控件WebView,另外,一些说明放在了代码注释中。

    本应用只有一张页面MainPage

    前台代码如下:

    XAML
     1 <Page
     2     x:Class="Win8RssReader.MainPage"
     3     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     4     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     5     xmlns:local="using:Win8RssReader"
     6     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     7     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     8     mc:Ignorable="d">
     9     <Page.Resources>
    10         <Style TargetType="TextBlock">
    11             <Setter Property="FontSize" Value="20"/>
    12             <Setter Property="IsTextSelectionEnabled" Value="True"/>
    13             <Setter Property="VerticalAlignment" Value="Center"/>
    14         </Style>
    15         <GridLength x:Key="height1">30</GridLength>
    16     </Page.Resources>
    17 
    18     <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    19         <Grid.ColumnDefinitions>
    20             <ColumnDefinition Width="300"/>
    21             <ColumnDefinition Width="*"/>
    22         </Grid.ColumnDefinitions>
    23         <Grid>
    24             <Grid.RowDefinitions>
    25                 <RowDefinition Height="{StaticResource height1}"/>
    26                 <RowDefinition Height="50"/>
    27                 <RowDefinition Height="{StaticResource height1}"/>
    28                 <RowDefinition Height="{StaticResource height1}"/>
    29                 <RowDefinition Height="{StaticResource height1}"/>
    30                 <RowDefinition Height="*"/>
    31             </Grid.RowDefinitions>
    32             <TextBox x:Name="txtFeedUri" Width="300" Text="http://www.cnblogs.com/rss"/>
    33             <Button x:Name="btnGetFeed" Content="加载RSS" Click="btnGetFeed_Click" Grid.Row="1"/>
    34             <StackPanel Orientation="Horizontal" Grid.Row="2">
    35                 <TextBlock Text="提示信息:"/>
    36                 <TextBlock x:Name="txtMsg" Text="暂无" />
    37             </StackPanel>
    38             <StackPanel Orientation="Horizontal" Grid.Row="3">
    39                 <TextBlock Text="RSS标题:"/>
    40                 <TextBlock x:Name="txtFeedTitle" Text="暂无" />
    41             </StackPanel>
    42             <StackPanel Orientation="Horizontal" Grid.Row="4">
    43                 <TextBlock Text="内容条数:"/>
    44                 <TextBlock x:Name="txtCount" Text="暂无" />
    45             </StackPanel>
    46             <ListBox x:Name="listTitle" SelectionChanged="listTitle_SelectionChanged" Grid.Row="5">
    47                 <ListBox.ItemTemplate>
    48                     <DataTemplate>
    49                         <TextBlock Text="{Binding Title.Text}" TextWrapping="Wrap"/>
    50                     </DataTemplate>
    51                 </ListBox.ItemTemplate>
    52             </ListBox>
    53         </Grid>
    54         <Grid Grid.Column="1">
    55             <Grid.RowDefinitions>
    56                 <RowDefinition Height="{StaticResource height1}"/>
    57                 <RowDefinition Height="*"/>
    58             </Grid.RowDefinitions>
    59             <TextBlock x:Name="txtItemTitle" HorizontalAlignment="Center"/>
    60             <WebView x:Name="webViewContent" Grid.Row="1"/>
    61         </Grid>
    62     </Grid>
    63 </Page>

    后台代码如下:

    C#
      1 using System;
      2 using System.Collections.Generic;
      3 using System.IO;
      4 using System.Linq;
      5 using System.Threading.Tasks;
      6 using Windows.Foundation;
      7 using Windows.Foundation.Collections;
      8 using Windows.Storage;
      9 using Windows.UI.Xaml;
     10 using Windows.UI.Xaml.Controls;
     11 using Windows.UI.Xaml.Controls.Primitives;
     12 using Windows.UI.Xaml.Data;
     13 using Windows.UI.Xaml.Input;
     14 using Windows.UI.Xaml.Media;
     15 using Windows.UI.Xaml.Navigation;
     16 using Windows.Web.Syndication;
     17 
     18 namespace Win8RssReader
     19 {
     20     public sealed partial class MainPage : Page
     21     {
     22         SyndicationClient syndicationClient;
     23         SyndicationFeed currentFeed;
     24 
     25         /// <summary>
     26         /// WebView在打开target="_blank"的超链接时会打开电脑上的浏览器,为了避免这种情况,这段js可通过更改DOM,使所有超链接的target="_self"。
     27         /// </summary>
     28         string MyJs { get; set; }
     29 
     30         public MainPage()
     31         {
     32             this.InitializeComponent();
     33         }
     34 
     35         async protected override void OnNavigatedTo(NavigationEventArgs e)
     36         {
     37             MyJs = await GetMyJs();
     38         }
     39 
     40         private async Task<string> GetMyJs()
     41         {
     42             StorageFile jsFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///js.txt"));
     43             string jsText = await FileIO.ReadTextAsync(jsFile);
     44             return jsText;
     45         }
     46 
     47         private async void btnGetFeed_Click(object sender, RoutedEventArgs e)
     48         {
     49             string feedUriString = txtFeedUri.Text;
     50             await GetFeedAsync(feedUriString);
     51             DisplayFeed();
     52         }
     53 
     54         private async Task GetFeedAsync(string feedUriString)
     55         {
     56             Uri uri;
     57             if (!Uri.TryCreate(feedUriString.Trim(), UriKind.Absolute, out uri))
     58             {
     59                 txtMsg.Text = "url错误";
     60                 return;
     61             }
     62             if (syndicationClient == null)
     63             {
     64                 syndicationClient = new SyndicationClient();
     65             }
     66             syndicationClient.BypassCacheOnRetrieve = true;
     67             syndicationClient.SetRequestHeader("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
     68             txtMsg.Text = "开始下载...";
     69             try
     70             {
     71                 currentFeed = await syndicationClient.RetrieveFeedAsync(uri);
     72                 txtMsg.Text = "下载完成";
     73             }
     74             catch (Exception ex)
     75             {
     76                 txtMsg.Text = ex.Message;
     77             }
     78         }
     79 
     80         private void DisplayFeed()
     81         {
     82             if (currentFeed != null)
     83             {
     84                 ISyndicationText title = currentFeed.Title;
     85                 txtFeedTitle.Text = title != null ? title.Text : "(没有标题)";
     86                 txtCount.Text = currentFeed.Items.Count.ToString();
     87                 listTitle.ItemsSource = currentFeed.Items;
     88                 listTitle.SelectedIndex = 0;//选中第0条,触发SelectionChanged事件。
     89             }
     90         }
     91 
     92         private void listTitle_SelectionChanged(object sender, SelectionChangedEventArgs e)
     93         {
     94             var item = (SyndicationItem)listTitle.SelectedValue;
     95             DisplayCurrentItem(item);
     96         }
     97 
     98         private void DisplayCurrentItem(SyndicationItem item)
     99         {
    100             if (item != null)
    101             {
    102                 txtItemTitle.Text = item.Title != null ? item.Title.Text : "(没有标题)";
    103                 string content = "(没有内容)";
    104                 if (item.Content != null)
    105                 {
    106                     content = item.Content.Text;
    107                 }
    108                 else if (item.Summary != null)
    109                 {
    110                     content = item.Summary.Text;
    111                 }
    112                 content += MyJs;
    113                 webViewContent.NavigateToString(content);
    114             }
    115         }
    116     }
    117 }

    引用文件js.txt中的内容如下:

    <script type="text/javascript">
    //WebView在打开target="_blank"的超链接时会打开电脑上的浏览器,为了避免这种情况,这段js可通过更改DOM,使所有超链接的target="_self"。
        var links = document.getElementsByTagName("a");
        for (var i = 0; i < links.length; i++) {
            links[i].target = "_self";
        }
    </script>

    解决方案打包下载 Win8RssReader.rar

    题外话:

    感觉现在做Windows Store App开发的很少哦,真心希望能和感兴趣的朋友们交流交流。

    欢迎留言 ^_^

  • 相关阅读:
    sourceinsight安装记录
    ultraedit使用记录
    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
    applicationContext.xml
    添加lib,支持断点运行,支持自动打包,支持 中文。
    使用Supervisor来管理你的Laravel队列
    laravel使用队列
    debian php无法使用bc函数 bcmath
    gti代码冲突解决
    debian 安装mysql后远程访问不了
  • 原文地址:https://www.cnblogs.com/chengyujia/p/2912870.html
Copyright © 2011-2022 走看看