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

SilverLight

开发平台:

C#

  1. using System.Windows;
  2. using System.Windows.Input;
  3. using System.Windows.Interactivity;
  4. using ESRI.ArcGIS.Client;
  5. using ESRI.ArcGIS.Client.Geometry;
  6. namespace ESRI.ArcGIS.Samples
  7. {
  8. /// <summary>
  9. /// Adds mouse wheel zoom to the map control when running out of browser, full-screen or 
  10. /// DOM bridge is disabled.
  11. /// </summary>
  12. public class WheelZoom : Behavior<Map>
  13. {
  14. private double res = double.NaN;
  15. /// <summary>
  16. /// Initializes a new instance of the <see cref="WheelZoom"/> class.
  17. /// </summary>
  18. public WheelZoom()
  19. {
  20. }
  21. /// <summary>
  22. /// Called after the behavior is attached to an AssociatedObject.
  23. /// </summary>
  24. /// <remarks>Override this to hook up functionality to the AssociatedObject.</remarks>
  25. protected override void OnAttached()
  26. {
  27. base.OnAttached();
  28. this.AssociatedObject.MouseWheel += AssociatedObject_MouseWheel;
  29. this.AssociatedObject.ExtentChanged += AssociatedObject_ExtentChanged;
  30. }
  31. /// <summary>
  32. /// Called when the behavior is being detached from its AssociatedObject, 
  33. /// but before it has actually occurred.
  34. /// </summary>
  35. /// <remarks>Override this to unhook functionality from the AssociatedObject.</remarks>
  36. protected override void OnDetaching()
  37. {
  38. base.OnDetaching();
  39. this.AssociatedObject.MouseWheel -= AssociatedObject_MouseWheel;
  40. this.AssociatedObject.ExtentChanged -= AssociatedObject_ExtentChanged;
  41. }
  42. private void AssociatedObject_ExtentChanged(object sender, ExtentEventArgs e)
  43. {
  44. res = double.NaN;
  45. }
  46. private void AssociatedObject_MouseWheel(object sender, MouseWheelEventArgs e)
  47. {
  48. //Only handle zoom event if the map control cannot
  49. if (!System.Windows.Browser.HtmlPage.IsEnabled ||
  50. Application.Current.IsRunningOutOfBrowser ||
  51. Application.Current.Host.Content.IsFullScreen)
  52. {
  53. double factor = e.Delta < 1 ? this.AssociatedObject.ZoomFactor : 1 / this.AssociatedObject.ZoomFactor;
  54. MapPoint center = AssociatedObject.ScreenToMap(e.GetPosition(AssociatedObject));
  55. if (double.IsNaN(res))
  56. res = this.AssociatedObject.Resolution;
  57. res = res * factor; //accumulate zoom-to resolution when doing multiple zooms before the previous is complete
  58. this.AssociatedObject.ZoomToResolution(res, center);
  59. this.AssociatedObject.Focus();
  60. }
  61. }
  62. }
  63. }