XAML-Map-Control/MapControl/MapPolyline.cs

81 lines
2.8 KiB
C#
Raw Normal View History

// XAML Map Control - http://xamlmapcontrol.codeplex.com/
// Copyright © 2013 Clemens Fischer
2012-05-04 12:52:20 +02:00
// Licensed under the Microsoft Public License (Ms-PL)
using System;
2012-12-15 18:54:40 +01:00
using System.Collections.Generic;
using System.Collections.Specialized;
#if NETFX_CORE
using Windows.UI.Xaml;
#else
2012-04-25 22:02:53 +02:00
using System.Windows;
#endif
2012-04-25 22:02:53 +02:00
namespace MapControl
{
public partial class MapPolyline : IMapElement
2012-04-25 22:02:53 +02:00
{
#if NETFX_CORE
// For WinRT, the Locations dependency property type is declared as object
// instead of IEnumerable. See http://stackoverflow.com/q/10544084/1136211
private static readonly Type LocationsPropertyType = typeof(object);
#else
private static readonly Type LocationsPropertyType = typeof(IEnumerable<Location>);
#endif
public static readonly DependencyProperty LocationsProperty = DependencyProperty.Register(
"Locations", LocationsPropertyType, typeof(MapPolyline),
new PropertyMetadata(null, LocationsPropertyChanged));
public static readonly DependencyProperty IsClosedProperty = DependencyProperty.Register(
"IsClosed", typeof(bool), typeof(MapPolyline),
new PropertyMetadata(false, (o, e) => ((MapPolyline)o).UpdateGeometry()));
2012-04-25 22:02:53 +02:00
/// <summary>
/// Gets or sets the locations that define the polyline points.
/// </summary>
2012-12-15 18:54:40 +01:00
public IEnumerable<Location> Locations
2012-05-04 12:52:20 +02:00
{
2012-12-15 18:54:40 +01:00
get { return (IEnumerable<Location>)GetValue(LocationsProperty); }
2012-05-04 12:52:20 +02:00
set { SetValue(LocationsProperty, value); }
}
/// <summary>
/// Gets or sets a value that indicates if the polyline is closed, i.e. is a polygon.
/// </summary>
public bool IsClosed
2012-05-04 12:52:20 +02:00
{
get { return (bool)GetValue(IsClosedProperty); }
set { SetValue(IsClosedProperty, value); }
2012-04-25 22:02:53 +02:00
}
2012-05-04 12:52:20 +02:00
void IMapElement.ParentMapChanged(MapBase oldParentMap, MapBase newParentMap)
2012-10-25 08:42:51 +02:00
{
UpdateGeometry();
2012-10-25 08:42:51 +02:00
}
2012-12-15 18:54:40 +01:00
private void LocationCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
UpdateGeometry();
}
private static void LocationsPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
var mapPolyline = (MapPolyline)obj;
2012-12-15 19:11:54 +01:00
var oldCollection = e.OldValue as INotifyCollectionChanged;
var newCollection = e.NewValue as INotifyCollectionChanged;
2012-12-15 18:54:40 +01:00
2012-12-15 19:11:54 +01:00
if (oldCollection != null)
2012-12-15 18:54:40 +01:00
{
2012-12-15 19:11:54 +01:00
oldCollection.CollectionChanged -= mapPolyline.LocationCollectionChanged;
2012-12-15 18:54:40 +01:00
}
2012-12-15 19:11:54 +01:00
if (newCollection != null)
2012-12-15 18:54:40 +01:00
{
2012-12-15 19:11:54 +01:00
newCollection.CollectionChanged += mapPolyline.LocationCollectionChanged;
2012-12-15 18:54:40 +01:00
}
mapPolyline.UpdateGeometry();
}
2012-04-25 22:02:53 +02:00
}
}