diff --git a/Demo.WindowsPresentation/CustomMarkers/CustomMarkerDemo.xaml.cs b/Demo.WindowsPresentation/CustomMarkers/CustomMarkerDemo.xaml.cs new file mode 100644 --- /dev/null +++ b/Demo.WindowsPresentation/CustomMarkers/CustomMarkerDemo.xaml.cs @@ -0,0 +1,121 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Input; +using System.Windows.Media; +using GMap.NET.WindowsPresentation; +using System.Diagnostics; + +namespace Demo.WindowsPresentation.CustomMarkers +{ + /// + /// Interaction logic for CustomMarkerDemo.xaml + /// + public partial class CustomMarkerDemo + { + Popup Popup; + Label Label; + GMapMarker Marker; + MainWindow MainWindow; + + public CustomMarkerDemo(MainWindow window, GMapMarker marker, string title) + { + this.InitializeComponent(); + + this.MainWindow = window; + this.Marker = marker; + + Popup = new Popup(); + Label = new Label(); + + this.Unloaded += new RoutedEventHandler(CustomMarkerDemo_Unloaded); + this.Loaded += new RoutedEventHandler(CustomMarkerDemo_Loaded); + this.SizeChanged += new SizeChangedEventHandler(CustomMarkerDemo_SizeChanged); + this.MouseEnter += new MouseEventHandler(MarkerControl_MouseEnter); + this.MouseLeave += new MouseEventHandler(MarkerControl_MouseLeave); + this.MouseMove += new MouseEventHandler(CustomMarkerDemo_MouseMove); + this.MouseLeftButtonUp += new MouseButtonEventHandler(CustomMarkerDemo_MouseLeftButtonUp); + this.MouseLeftButtonDown += new MouseButtonEventHandler(CustomMarkerDemo_MouseLeftButtonDown); + + Popup.Placement = PlacementMode.Mouse; + { + Label.Background = Brushes.Blue; + Label.Foreground = Brushes.White; + Label.BorderBrush = Brushes.WhiteSmoke; + Label.BorderThickness = new Thickness(2); + Label.Padding = new Thickness(5); + Label.FontSize = 22; + Label.Content = title; + } + Popup.Child = Label; + } + + void CustomMarkerDemo_Loaded(object sender, RoutedEventArgs e) + { + if(icon.Source.CanFreeze) + { + icon.Source.Freeze(); + } + } + + void CustomMarkerDemo_Unloaded(object sender, RoutedEventArgs e) + { + this.Unloaded -= new RoutedEventHandler(CustomMarkerDemo_Unloaded); + this.Loaded -= new RoutedEventHandler(CustomMarkerDemo_Loaded); + this.SizeChanged-= new SizeChangedEventHandler(CustomMarkerDemo_SizeChanged); + this.MouseEnter -= new MouseEventHandler(MarkerControl_MouseEnter); + this.MouseLeave -= new MouseEventHandler(MarkerControl_MouseLeave); + this.MouseMove -= new MouseEventHandler(CustomMarkerDemo_MouseMove); + this.MouseLeftButtonUp -= new MouseButtonEventHandler(CustomMarkerDemo_MouseLeftButtonUp); + this.MouseLeftButtonDown -= new MouseButtonEventHandler(CustomMarkerDemo_MouseLeftButtonDown); + + Marker.Shape = null; + icon.Source = null; + icon = null; + Popup = null; + Label = null; + } + + void CustomMarkerDemo_SizeChanged(object sender, SizeChangedEventArgs e) + { + Marker.Offset = new Point(-e.NewSize.Width/2, -e.NewSize.Height); + } + + void CustomMarkerDemo_MouseMove(object sender, MouseEventArgs e) + { + if(e.LeftButton == MouseButtonState.Pressed && IsMouseCaptured) + { + Point p = e.GetPosition(MainWindow.MainMap); + Marker.Position = MainWindow.MainMap.FromLocalToLatLng((int) (p.X), (int) (p.Y)); + } + } + + void CustomMarkerDemo_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) + { + if(!IsMouseCaptured) + { + Mouse.Capture(this); + } + } + + void CustomMarkerDemo_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) + { + if(IsMouseCaptured) + { + Mouse.Capture(null); + } + } + + void MarkerControl_MouseLeave(object sender, MouseEventArgs e) + { + Marker.ZIndex -= 10000; + Popup.IsOpen = false; + } + + void MarkerControl_MouseEnter(object sender, MouseEventArgs e) + { + Marker.ZIndex += 10000; + Popup.IsOpen = true; + } + } +} \ No newline at end of file