zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Kubernetes之Replica Set
    Kubernetes之Replication Controller
    Kubernetes之Deployment
    golang channel select
    golang slice
    epoll的由来
    ceph crush 之 crush_do_rule
    libevent
    P2P资料
    混沌理论学习笔记
  • 原文地址:https://www.cnblogs.com/infly123/p/3099330.html
Copyright © 2011-2022 走看看