WPF 模拟Windows 7 气象组件

     本篇将利用Weather Reader User Control(WRUC) 模拟Windows 7 Gadgets 中的气象组件。WRUC 控件是使用C#和 WPF 制作的,首先下载WRUC 源代码,其实该控件已经实现了所有天气预报的功能,只需将DLL 库导入到其他项目使用即可。

WRUC 更新

     在使用WRUC 控件之前先了解一下它的工作模式,并完善其中的一些功能。通过源码可以看出控件是通过http://weather.service.msn.com 服务获取某地天气数据(XML格式),再将XML 读取出来用WPF 呈现给用户。下图为WRUC 默认的界面样式,可以看到控件默认是Redmond 地区的天气,虽然可以设置为其他地区,但还是希望程序运行时就是本地天气数据。同时还想在当日气温下方添加当日温度范围,并将所有温度改为摄氏度。

ori

     在WRUC 项目中可以看到Settings1.settings 配置文件,打开后里面即为Redmond 地区信息,将其修改为本地信息,这里我全部改为Beijing。

setfile

这样控件默认地区就是Beijing了,并且DegreeType 可以将温度默认调整为摄氏度。

setting

     地区和温度类型设置完成后,下面来添加当日气温范围数据,也就是获取当日最低和最高气温。在MsnWeatherDataProvider 类中当前气温信息是通过WeatherPoint 类完成的,所以先在WeatherPoint.cs 中添加最高温度和最低温度以及温度范围。

private double highTemperature;  public double HighTemperature  {      get { return Math.Floor(highTemperature); }      set { highTemperature = value; }  }    private double lowTemperature;  public double LowTemperature  {      get { return Math.Floor(lowTemperature); }      set { lowTemperature = value; }  }    public string TemperatureRangeString  {      get { return LowTemperature.ToString() + "°- " + HighTemperature.ToString() + "°"; }  }

     回到MsnWeatherDataProvider 类,GetLatestWeatherReport 方法通过XmlTextReader 读取气象服务返回的XML 代码获得控件中所需的气温数据,那当日气温范围的数据在什么地方呢?这就需要看一看XML 代码返回的是什么内容了。

     通过浏览http://weather.service.msn.com/data.aspx?src=vista&wealocations=wc:CHXX0008 获得下面XML 代码,可见当日最低与最高气温数据就在第一个forecast 的low 和high 参数中。因为所有forecast 的数据早已被GetLatestWeatherReport 保存到WeatherReport 类的Forecast中,下面只需从Forecast 吊起就OK了。

<?xml version="1.0" ?>  <weatherdata>      <weather weatherlocationcode="wc:CHXX0008" weatherlocationname="Beijing, CHN" 
zipcode="" encodedlocationname="Beijing%2c+CHN"
url=http://weather.msn.com/local.aspx?wealocations=wc:CHXX0008&q=Beijing%2c+CHN
imagerelativeurl="http://blst.msn.com/as/wea3/i/en-us/" degreetype="F" provider="Foreca"
attribution="Data provided by Foreca" attribution2="

你可能感兴趣的:(WPF 模拟Windows 7 气象组件)