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

SilverLight

开发平台:

C#

  1. using System.Windows;
  2. using System.Windows.Controls;
  3. using ESRI.ArcGIS.Client;
  4. namespace ESRI.ArcGIS.Samples
  5. {
  6. [TemplatePart(Name = "Progress", Type = typeof(ProgressBar))]
  7. [TemplatePart(Name = "ValueText", Type = typeof(TextBlock))]
  8. public class MapProgress : Control
  9. {
  10. ProgressBar bar;
  11. TextBlock text;
  12. bool isVisible = false;
  13. public MapProgress()
  14. {
  15. DefaultStyleKey = typeof(MapProgress);
  16. }
  17. public override void OnApplyTemplate()
  18. {
  19. base.OnApplyTemplate();
  20. text = GetTemplateChild("ValueText") as TextBlock;
  21. bar = GetTemplateChild("Progress") as ProgressBar;
  22. ChangeVisualState(false);
  23. }
  24. private void ChangeVisualState(bool useTransitions)
  25. {
  26. bool ok = false;
  27. if (isVisible)
  28. {
  29. ok = GoToState(useTransitions, "Show");
  30. }
  31. else
  32. {
  33. ok = GoToState(useTransitions, "Hide");
  34. }
  35. }
  36. private bool GoToState(bool useTransitions, string stateName)
  37. {
  38. return VisualStateManager.GoToState(this, stateName, useTransitions);
  39. }
  40. public ESRI.ArcGIS.Client.Map Map
  41. {
  42. get { return (ESRI.ArcGIS.Client.Map)GetValue(MapProperty); }
  43. set { SetValue(MapProperty, value); }
  44. }
  45. public static readonly DependencyProperty MapProperty =
  46. DependencyProperty.Register("Map", typeof(ESRI.ArcGIS.Client.Map), typeof(MapProgress), new PropertyMetadata(null, OnMapPropertyChanged));
  47. private static void OnMapPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  48. {
  49. MapProgress mp = d as MapProgress;
  50. Map oldMap = e.OldValue as Map;
  51. Map newMap = e.NewValue as Map;
  52. if (oldMap != null)
  53. {
  54. oldMap.Progress -= mp.newMap_Progress;
  55. }
  56. if (newMap != null)
  57. {
  58. newMap.Progress += mp.newMap_Progress;
  59. }
  60. }
  61. private void newMap_Progress(object sender, ProgressEventArgs e)
  62. {
  63. if (bar != null)
  64. bar.Value = e.Progress;
  65. if (text != null)
  66. text.Text = string.Format("{0}%", e.Progress);
  67. isVisible = (e.Progress < 99);
  68. ChangeVisualState(true);
  69. }
  70. }
  71. }