昨天做了个小功能,就是例子上的http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#LayerList,也有些许不同,就是实现checkbox通过选中图层控制图层的可见性,图层是从xml文件读的,图层的属性绑定在listbox上,不多说了了先上代码:

    图层类:LayerItem

View Code
 1 /// <summary>
 2         /// 图层ID
 3         /// </summary>
 4         public string ID
 5         {
 6             get;
 7             set;
 8         }
 9 
10         /// <summary>
11         /// 图层的标签
12         /// </summary>
13         public string Label
14         {
15             get;
16             set;
17         }
18 
19         /// <summary>
20         /// 图层类型
21         /// </summary>
22         public LayerType Type
23         {
24             get;
25             set;
26         }
27 
28 
29         private string m_Url = string.Empty;
30         /// <summary>
31         /// 图层地址
32         /// </summary>
33         public string Url
34         {
35             get
36             {
37                 m_Url = WebUtil.ReDirectDynamicUrl(m_Url, string.Empty);
38                 return m_Url;
39             }
40             set { m_Url = value; }
41         }

   地图控件:Map

View Code
1  <esri:Map x:Name="Map"  IsLogoVisible="False" />

   Listbox绑定图层类,自定义模板包括checkbox和textblock

View Code
 1 <ListBox x:Name="MyList" ItemsSource="{Binding LayerItems}">
 2                                         <ListBox.ItemTemplate>
 3                                             <DataTemplate>
 4                                                 <StackPanel Orientation="Horizontal">
 5                                                     <!--Layer visibility checkbox-->
 6                                                     <CheckBox   Click="CheckBox_Click" IsChecked="True"/>
 7                                                     <!--Layer name-->
 8                                                     <TextBlock Text="{Binding Label}"/>                                                  
 9                                                 </StackPanel>
10                                             </DataTemplate>
11                                         </ListBox.ItemTemplate>
12                                     </ListBox>

   后台代码:

1.读xml

View Code
 1 string sourceUrl = Application.Current.Host.Source.ToString();
 2             int removeIndex = sourceUrl.IndexOf("ClientBin");
 3             string configUrl = sourceUrl.Remove(removeIndex, sourceUrl.Length - removeIndex);
 4             Uri configUri = new Uri(configUrl);
 5             Uri url = new Uri(configUri + "ClientBin/Config.xml?" + Guid.NewGuid().ToString());
 6             WebClient webClient = new WebClient();
 7             webClient.OpenReadAsync(url);
 8             webClient.OpenReadCompleted += ConfigLoadCompleted;
 9 
10  void ConfigLoadCompleted(object sender, OpenReadCompletedEventArgs e)
11         {
12             Stream stream = e.Result;
13             using (XmlReader xReader = XmlReader.Create(stream))
14             {
15                 XDocument document = XDocument.Load(xReader);
16                 ConfigDoc = document;
17                 //读取图层列表
18                 var layers = from f in document.Descendants("Layer")
19                              select new ZHPlatform.Layer.LayerItem
20                              {
21                                  ID = f.Attribute("ID").Value,
22                                  Label = f.Attribute("Label").Value,
23                                  Url = f.Attribute("Url").Value,
24                                  Type = (LayerType)Enum.Parse(typeof(LayerType), f.Attribute("Type").Value, false),
25                                  SearchFields = f.Attribute("SearchFields").Value.Split(new char[] { ',' }).ToList(),
26                                  DisplayLabels = f.Attribute("DisplayLabel").Value.Split(new char[] { ',' }).ToList(),
27                                  KeyWord = f.Attribute("KeyWord").Value,
28                                  EditUrl = f.Attribute("EditUrl").Value,
29                                  IdentifyUrl = f.Attribute("IdentifyUrl").Value,
30                              };
31                 if (layerItems == null)
32                     layerItems = new List<LayerItem>();
33                 layerItems.AddRange(layers);
34                 MyList.ItemsSource = layerItems;
35                 Map.Layers = new ESRI.ArcGIS.Client.LayerCollection();
36                
37                 foreach (LayerItem litem in layerItems)
38                 {
39                     ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer dynamicServiceLayer = new ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer();
40                     dynamicServiceLayer.Url = litem.Url;
41                     dynamicServiceLayer.ID = litem.ID;
42                     Map.Layers.Add(dynamicServiceLayer);
43                 }               
44                 OnLoadConfigComplete();
45             }
46         }

2.checkbox选中事件

View Code
 1  private void CheckBox_Click(object sender, RoutedEventArgs e)
 2         {
 3             CheckBox tickedCheckBox = sender as CheckBox;
 4             bool visible = (bool)tickedCheckBox.IsChecked;
 5             LayerItem lyrItem = tickedCheckBox.DataContext as LayerItem;
 6             ESRI.ArcGIS.Client.Layer lyr = Map.Layers[lyrItem.ID];
 7             if (lyr != null)
 8             {
 9                 if (visible)
10                 {
11                     lyr.Visible = true;
12                 }
13                 else
14                 {
15                     lyr.Visible = false;
16                 }
17             }
18           }

 3.最后效果