第18课 综合实例之RSS阅读器

本文通过整合界面布局、样式及数据绑定等技术,开发了一款简易RSS阅读器。该阅读器支持RSS地址输入、列表展示及详细信息查看等功能。

概述

本文将综合前面十七篇讲过的界面布局、样式、控件模板、数据绑定、网络通信等几个方面,来开发一个综合实例——简易RSS阅读器。

界面布局

我们最终完成的RSS阅读器界面如下:

TerryLee_Silverlight2_0082

定义一个三行两列的Grid,分别放置顶部信息、分割线和下面的内容区:

Grid.RowDefinitions>
    RowDefinition Height="50">RowDefinition>
    RowDefinition Height="20">RowDefinition>
    RowDefinition Height="*">RowDefinition>
Grid.RowDefinitions>
Grid.ColumnDefinitions> ColumnDefinition Width="240">ColumnDefinition> ColumnDefinition Width="*">ColumnDefinition> Grid.ColumnDefinitions>

设计顶部输入区域,对Grid第一行做合并,并且放置一个StackPanel:

StackPanel x:Name="Header" Orientation="Horizontal"
             Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">
    Image Source="Rss.png" Width="32" Height="32" Margin="10 0 10 0">Image>
    Border Style="{StaticResource titleBorder}">
        TextBlock Text="基于Silverlight的RSS阅读器" Foreground="#FFFFFF"
                   VerticalAlignment="Center" Margin="12 0 0 0">TextBlock>
    Border>
    WatermarkedTextBox x:Name="feedAddress" Width="300" Height="35" FontSize="16" Margin="10 0 10 0"> WatermarkedTextBox.Watermark> TextBlock Text="请输入有效的RSS地址" VerticalAlignment="Center" Foreground="#FBA430" FontSize="16">TextBlock> WatermarkedTextBox.Watermark> WatermarkedTextBox> Button x:Name="displayButton" Style="{StaticResource button}" Content="显 示" Click="displayButton_Click">Button> Button x:Name="fullScreenButton" Style="{StaticResource button}" Content="全 屏" Click="fullScreenButton_Click">Button> StackPanel>

鉴于两个按钮的风格一致,在App.xaml中定义一个button样式:

Style x:Key="button" TargetType="Button">
    Setter Property="Width" Value="100">Setter>
    Setter Property="Height" Value="35">Setter>
    Setter Property="Background" Value="#FBA430">Setter>
    Setter Property="Foreground" Value="#FBA430">Setter> Setter Property="FontSize" Value="16">Setter> Style> Style x:Key="titleBorder" TargetType="Border"> Setter Property="CornerRadius" Value="10">Setter> Setter Property="Width" Value="220">Setter> Setter Property="Height" Value="40">Setter> Setter Property="Background"> Setter.Value> LinearGradientBrush StartPoint="0,0"> GradientStop Color="#FBA430" Offset="0.0" /> GradientStop Color="#FEF4E7" Offset="0.5" /> GradientStop Color="#FBA430" Offset="1.0" /> LinearGradientBrush> Setter.Value> Setter> Style>
定义分割线,用Rectangle来表示:
StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center">
    Rectangle Style="{StaticResource rectangle}"/>
StackPanel>

为了显示出渐变的样式,我们定义样式如下:

Style x:Key="rectangle" TargetType="Rectangle">
    Setter Property="Width" Value="780">Setter>
    Setter Property="Height" Value="5">Setter>
    Setter Property="RadiusX" Value="3">Setter>
    Setter Property="RadiusY" Value="3">Setter> Setter Property="Fill"> Setter.Value> LinearGradientBrush StartPoint="0,0"> GradientStop Color="#FEF4E7" Offset="0.0" /> GradientStop Color="#FBA430" Offset="1.0" /> LinearGradientBrush> Setter.Value> Setter> Style>
定义左边的列表区,用ListBox来显示,并且定义ItemTemplate:
ListBox x:Name="PostsList" Grid.Column="0" Grid.Row="2"
         Margin="10 5 5 10" SelectionChanged="PostsList_SelectionChanged">
    ListBox.ItemTemplate>
        DataTemplate>
            TextBlock Text="{Binding Title.Text}" 
                           TextWrapping="Wrap" Width="200"/>
        DataTemplate>
    ListBox.ItemTemplate>
ListBox>

最后定义右边的详细信息区域,在StackPanel中垂直放置三个Border:

StackPanel x:Name="Detail" Grid.Column="1" Grid.Row="2">
    Border CornerRadius="10" Background="#CDFCAE" Margin="10 5 10 10"
            Width="540" Height="40">
        TextBlock Text="{Binding Title.Text}"  TextWrapping="Wrap"
                   VerticalAlignment="Center" Foreground="Red"/>
    Border>
    Border CornerRadius="10" Background="#CDFCAE" Margin="10 5 10 10"
            Width="540" Height="300">
        TextBlock Text="{Binding Summary.Text}" TextWrapping="Wrap"/> Border> Border CornerRadius="10" Background="#CDFCAE" Margin="10 5 10 10" Width="540" Height="40"> StackPanel Orientation="Horizontal"> TextBlock Text="评论日期:" TextWrapping="Wrap" Foreground="Red" VerticalAlignment="Center"/> TextBlock Text="{Binding PublishDate}" TextWrapping="Wrap" Foreground="Red" VerticalAlignment="Center"/> StackPanel> Border> StackPanel>

界面布局到此大功告成。

实现功能

下面实现数据的获取,采用WebRequest来实现,也可以使用其他方式。

/// <summary>
/// </summary>显示列表
/// 
/// 
/// private void displayButton_Click(object sender, RoutedEventArgs e)
{
    Uri uri = new Uri(feedAddress.Text);
    WebRequest request = (WebRequest)WebRequest.Create(uri);
    request.BeginGetResponse(new AsyncCallback(responseReady), request);
}

void responseReady(IAsyncResult asyncResult)
{
    WebRequest request = (WebRequest)asyncResult.AsyncState;
    WebResponse response = (WebResponse)request.EndGetResponse(asyncResult);

    XmlReader reader = XmlReader.Create(response.GetResponseStream());
    SyndicationFeed feed = SyndicationFeed.Load(reader);

    PostsList.ItemsSource = feed.Items;
}

显示详细信息:

/// <summary>
/// </summary>查看详细信息
/// 
/// 
/// private void PostsList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    SyndicationItem item = PostsList.SelectedItem as SyndicationItem;

    Detail.DataContext = item;
}

实现全屏按钮的代码:

/// <summary>
/// </summary>全屏显示
/// 
/// 
/// private void fullScreenButton_Click(object sender, RoutedEventArgs e)
{
    Content contentObject = Application.Current.Host.Content;
    contentObject.IsFullScreen = !contentObject.IsFullScreen;
}

运行效果

运行后界面如下:

TerryLee_Silverlight2_0080

输入豆瓣的最新影评Feed:

TerryLee_Silverlight2_0081

选择其中一项后,将显示出详细信息:

TerryLee_Silverlight2_0082

结束语

本文对前面十七篇内容做了一个小结,并开发出了一个简易RSS阅读器,你可以从这里下载本文示例代码。

【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值