北京的地铁线路又增加了几条,无奈windows phone的软件更新实在不给力,很多线路都没有。那只能自己做一个了。做好的效果如下图:
代码下载:http://files.cnblogs.com/infly123/PhoneSubWay.rar
软件说明:
开发工具:visual studio 2010 其中弹出框用了Codig4Fun第三方控件。
支持拖拽地图位置、查询站点位置、查询所有线路和所有站点、缩放地图大小等功能。
地铁的线路及站点信息存放在XML文件中,若增加了新的线路,则在XML中增加新线路及所有站点信息即可,软件可自动在界面中画出新的线路。
主要代码说明:
1.XML文件:<Lines>节点声明了所有的地铁线路及颜色,<Nodes>包括站点名称、站点坐标、所属线路信息。
<SubWay> <Lines> <Line Name="1号线" Color="255, 255, 0, 0" /> <Line Name="2号线" Color="255, 0, 104, 183" /> <Line Name="4号线" Color="255, 0, 255, 255" /> <.....> </Lines> <Nodes Name="4号线"> <Node Name="安河桥北" X="-15" Y="450" LineName="4号线"> </Node> <Node Name="北宫门" X="50" Y="450" LineName="4号线"> </Node> <Node Name="西苑" X="115" Y="450" LineName="4号线"> <.....> </Nodes Name="4号线"> </Lines>
2.数据的读取:
颜色的读取:
/// <summary> /// 将Xml中的Color的字符串描述转换为Color类型 /// </summary> /// <param name="s"></param> /// <returns></returns> public Color GetColor(string s) { byte b1 = byte.Parse(s.Split(',')[0]); byte b2 = byte.Parse(s.Split(',')[1]); byte b3 = byte.Parse(s.Split(',')[2]); byte b4 = byte.Parse(s.Split(',')[3]); Color myColor = Color.FromArgb(b1, b2, b3, b4); return myColor; }
站点信息的读取:(用了Linq,其中SubNode为站点类,包括站点名称Name,站点坐标Point,站点所属节点LineName)
//获取站点集合 var nodes = from s in root.Elements("Nodes").Elements("Node") select new SubNode { Name = s.Attribute("Name").Value, Point=new Point(double.Parse( s.Attribute("X").Value),double.Parse( s.Attribute("Y").Value)), LineName=s.Attribute("LineName").Value }; ListSubNode = nodes.ToList<SubNode>();
3.查看所有线路及其包含的站点:这里将地铁集合与控件进行了绑定,并且显示信息为站点名称
<ComboBox x:Name="cobLine" ItemsSource="{Binding}" Margin="12,12,295,29" SelectionChanged="cobLine_SelectionChanged"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Name}"></TextBlock> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>
最后:
软件还有很多不足之处,由于时间仓促很多地方的实现方法并不是很好,比如弹出窗体搜索站点中我想使用AutoCompleteBox实现智能提示,但受Codig4Fun控件的限制效果并不好(这个我放在了"设置"中);缩放地图后再查询某个站点定位会不准确;没法根据布局单独设置某个站点名称的显示位置等
本人大四,热爱编程,欢迎.net及其他方向的程序员一起交流一起进步,欢迎加我qq:1241311001