Windows phone 北京地铁软件实现

    北京的地铁线路又增加了几条,无奈windows phone的软件更新实在不给力,很多线路都没有。那只能自己做一个了。做好的效果如下图:

    代码下载:https://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

原文地址:https://www.cnblogs.com/infly123/p/3099330.html