北京的地鐵線路又增加了幾條,無奈windows phone的軟體更新實在不給力,很多線路都沒有。那隻能自己做一個了。做好的效果如下圖:
軟體說明:
開發工具:visual studio 2010 其中彈出框用了Codig4Fun第三方控制項。
支援拖拽地圖位置、查詢網站位置、查詢所有線路和所有網站、縮放地圖大小等功能。
地鐵的線路及網站資訊存放在XML檔案中,若增加了新的線路,則在XML中增加新線路及所有網站資訊即可,軟體可自動在介面中畫出新的線路。
查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/
主要代碼說明:
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控制項的限制效果並不好(這個我放在了"設定"中);縮放地圖後再查詢某個網站定位會不準確;沒法根據布局單獨設定某個網站名稱的顯示位置等
代碼下載:http://files.cnblogs.com/infly123/PhoneSubWay.rar