LayerList.xaml.cs
上传用户:huazai0421
上传日期:2008-05-30
资源大小:405k
文件大小:4k
源码类别:

SilverLight

开发平台:

C#

  1. using System.Collections.Generic;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.Windows.Input;
  5. namespace ESRI.ArcGIS.Samples
  6. {
  7. public partial class LayerList : UserControl
  8. {
  9. public LayerList()
  10. {
  11. InitializeComponent();
  12. }
  13. public class Layer
  14. {
  15. public Layer(ESRI.ArcGIS.Client.Layer layer, int index)
  16. {
  17. Index = index;
  18. ID = layer.ID;
  19. Opacity = layer.Opacity;
  20. Visible = layer.Visible;
  21. }
  22. public int Index { get; set; }
  23. public string ID { get; set; }
  24. public double Opacity { get; set; }
  25. public bool Visible { get; set; }
  26. }
  27. private void UpdateLayers()
  28. {
  29. List<Layer> layers = new List<Layer>();
  30. if (Map != null)
  31. {
  32. int i=0;
  33. foreach(ESRI.ArcGIS.Client.Layer l in Map.Layers)
  34. {
  35. if (i == 0 || l.ID == "Annotations" || string.IsNullOrEmpty(l.ID))
  36. {
  37. i++;
  38. continue; //hide base layer
  39. }
  40. layers.Insert(0, new Layer(l, i++));
  41. }
  42. }
  43. list.Visibility = (layers.Count == 0) ? Visibility.Collapsed : Visibility.Visible;
  44. noLayers.Visibility = (layers.Count != 0) ? Visibility.Collapsed : Visibility.Visible;
  45. list.ItemsSource = layers;
  46. }
  47. /// <summary>
  48. /// Identifies the <see cref="Map"/> dependency property.
  49. /// </summary>
  50. public static readonly DependencyProperty MapProperty =
  51. DependencyProperty.Register("Map", typeof(ESRI.ArcGIS.Client.Map), typeof(LayerList),
  52. new PropertyMetadata(null, OnMapPropertyChanged));
  53. /// <summary>
  54. /// Gets or sets Map.
  55. /// </summary>
  56. public ESRI.ArcGIS.Client.Map Map
  57. {
  58. get { return (ESRI.ArcGIS.Client.Map)GetValue(MapProperty); }
  59. set { SetValue(MapProperty, value); }
  60. }
  61. /// <summary>
  62. /// MapProperty property changed handler. 
  63. /// </summary>
  64. /// <param name="d">LayersControl that changed its Map.</param>
  65. /// <param name="e">DependencyPropertyChangedEventArgs.</param> 
  66. private static void OnMapPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  67. {
  68. LayerList dp = d as LayerList;
  69. ESRI.ArcGIS.Client.Map newMap = (ESRI.ArcGIS.Client.Map)e.NewValue;
  70. ESRI.ArcGIS.Client.Map oldMap = (ESRI.ArcGIS.Client.Map)e.OldValue;
  71. if (oldMap != null)
  72. newMap.Layers.CollectionChanged -= dp.Layers_CollectionChanged;
  73. if (newMap != null)
  74. newMap.Layers.CollectionChanged += dp.Layers_CollectionChanged;
  75. dp.UpdateLayers();
  76. }
  77. private void Layers_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
  78. {
  79. UpdateLayers();
  80. }
  81. private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
  82. {
  83. Slider slider = sender as Slider;
  84. Layer l = slider.DataContext as Layer;
  85. Map.Layers[l.Index].Opacity = slider.Value;
  86. }
  87. private void CheckBox_Checked(object sender, RoutedEventArgs e)
  88. {
  89. CheckBox cb = sender as CheckBox;
  90. Layer l = cb.DataContext as Layer;
  91. Map.Layers[l.Index].Visible = cb.IsChecked.Value;
  92. }
  93. private void MoveUp_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  94. {
  95. FrameworkElement cb = sender as FrameworkElement;
  96. Layer l = cb.DataContext as Layer;
  97. Reorder(l.Index, 1);
  98. }
  99. private void MoveDown_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  100. {
  101. FrameworkElement cb = sender as FrameworkElement;
  102. Layer l = cb.DataContext as Layer;
  103. if (l.ID == "Annotations") return;
  104. Reorder(l.Index, -1);
  105. }
  106. private void Reorder(int layerIndex, int direction)
  107. {
  108. ESRI.ArcGIS.Client.Layer l = Map.Layers[layerIndex];
  109. if (l == null || direction == 0) return;
  110. int newIndex = layerIndex + direction;
  111. if (newIndex < 1) newIndex = 1;
  112. if (newIndex >= Map.Layers.Count) newIndex = Map.Layers.Count - 1;
  113. if (Map.Layers[newIndex].ID == "Annotations") newIndex--;
  114. if (newIndex == layerIndex) return;
  115. Map.Layers.Remove(l);
  116. //if (direction > 0) newIndex--;
  117. Map.Layers.Insert(newIndex, l);
  118. }
  119. }
  120. }