先上运行截图:

简单说明:右侧主要内容的显示使用了浏览器控件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>题外话:
感觉现在做Windows Store App开发的很少哦,真心希望能和感兴趣的朋友们交流交流。



下载 
下载 
下载 
下载
下载
下载
喜欢
顶
难过
囧
围观
无聊





