[WPF] Maps project for WPF backend (#1335)
* Add Xamarin.Forms.Maps.WPF * Remove french comment in AssemblyInfo.cs * Remove private keyword
This commit is contained in:
Родитель
1bbd9dfa52
Коммит
4d92383d19
|
@ -0,0 +1,30 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms.Maps.WPF;
|
||||
|
||||
namespace Xamarin
|
||||
{
|
||||
public static class FormsMaps
|
||||
{
|
||||
static bool s_isInitialized;
|
||||
|
||||
internal static string AuthenticationToken { get; set; }
|
||||
|
||||
public static void Init(string authenticationToken)
|
||||
{
|
||||
AuthenticationToken = authenticationToken;
|
||||
Init();
|
||||
}
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
if (s_isInitialized)
|
||||
return;
|
||||
GeocoderBackend.Register();
|
||||
s_isInitialized = true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
using Microsoft.Maps.MapControl.WPF;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
|
||||
namespace Xamarin.Forms.Maps.WPF
|
||||
{
|
||||
internal class FormsPushPin : Pushpin
|
||||
{
|
||||
public Pin Pin { get; private set; }
|
||||
|
||||
internal FormsPushPin(Pin pin)
|
||||
{
|
||||
Pin = pin;
|
||||
|
||||
UpdateLocation();
|
||||
|
||||
Loaded += FormsPushPin_Loaded;
|
||||
Unloaded += FormsPushPin_Unloaded;
|
||||
MouseDown += FormsPushPin_MouseDown;
|
||||
}
|
||||
|
||||
void FormsPushPin_Loaded(object sender, System.Windows.RoutedEventArgs e)
|
||||
{
|
||||
Pin.PropertyChanged += PinPropertyChanged;
|
||||
}
|
||||
|
||||
void FormsPushPin_Unloaded(object sender, System.Windows.RoutedEventArgs e)
|
||||
{
|
||||
Pin.PropertyChanged -= PinPropertyChanged;
|
||||
}
|
||||
|
||||
void FormsPushPin_MouseDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
Pin.SendTap();
|
||||
}
|
||||
|
||||
void PinPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == Pin.PositionProperty.PropertyName)
|
||||
UpdateLocation();
|
||||
}
|
||||
|
||||
void UpdateLocation()
|
||||
{
|
||||
Location = new Location(Pin.Position.Latitude, Pin.Position.Longitude);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
using Microsoft.Maps.MapControl.WPF;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Xamarin.Forms.Maps.WPF
|
||||
{
|
||||
internal class GeocoderBackend
|
||||
{
|
||||
public static void Register()
|
||||
{
|
||||
Geocoder.GetPositionsForAddressAsyncFunc = GetPositionsForAddress;
|
||||
Geocoder.GetAddressesForPositionFuncAsync = GetAddressesForPositionAsync;
|
||||
}
|
||||
|
||||
static async Task<IEnumerable<string>> GetAddressesForPositionAsync(Position position)
|
||||
{
|
||||
return new List<string>();
|
||||
}
|
||||
|
||||
static async Task<IEnumerable<Position>> GetPositionsForAddress(string address)
|
||||
{
|
||||
return new List<Position>();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,298 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms.Platform.WPF;
|
||||
using Microsoft.Maps.MapControl.WPF;
|
||||
using WMap = Microsoft.Maps.MapControl.WPF.Map;
|
||||
using System.ComponentModel;
|
||||
using System.Collections.Specialized;
|
||||
using System.Device.Location;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace Xamarin.Forms.Maps.WPF
|
||||
{
|
||||
public class MapRenderer : ViewRenderer<Map, WMap>
|
||||
{
|
||||
DispatcherTimer _timer;
|
||||
|
||||
protected override async void OnElementChanged(ElementChangedEventArgs<Map> e)
|
||||
{
|
||||
if (e.OldElement != null) // Clear old element event
|
||||
{
|
||||
MessagingCenter.Unsubscribe<Map, MapSpan>(this, "MapMoveToRegion");
|
||||
((ObservableCollection<Pin>)e.OldElement.Pins).CollectionChanged -= OnCollectionChanged;
|
||||
}
|
||||
|
||||
if (e.NewElement != null)
|
||||
{
|
||||
if (Control == null) // construct and SetNativeControl and suscribe control event
|
||||
{
|
||||
SetNativeControl(new WMap());
|
||||
Control.CredentialsProvider = new ApplicationIdCredentialsProvider(FormsMaps.AuthenticationToken);
|
||||
Control.ViewChangeOnFrame += Control_ViewChangeOnFrame;
|
||||
}
|
||||
|
||||
// Update control property
|
||||
UpdateMapType();
|
||||
await UpdateIsShowingUser();
|
||||
UpdateHasZoomEnabled();
|
||||
UpdateHasZoomEnabled();
|
||||
UpdateVisibleRegion();
|
||||
|
||||
// Suscribe element event
|
||||
MessagingCenter.Subscribe<Map, MapSpan>(this, "MapMoveToRegion", (s, a) => MoveToRegion(a), Element);
|
||||
((ObservableCollection<Pin>)Element.Pins).CollectionChanged += OnCollectionChanged;
|
||||
}
|
||||
|
||||
base.OnElementChanged(e);
|
||||
}
|
||||
|
||||
void Control_ViewChangeOnFrame(object sender, MapEventArgs e)
|
||||
{
|
||||
UpdateVisibleRegion();
|
||||
}
|
||||
|
||||
protected override async void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
base.OnElementPropertyChanged(sender, e);
|
||||
|
||||
if (e.PropertyName == Map.MapTypeProperty.PropertyName)
|
||||
UpdateMapType();
|
||||
else if (e.PropertyName == Map.IsShowingUserProperty.PropertyName)
|
||||
await UpdateIsShowingUser();
|
||||
else if (e.PropertyName == Map.HasScrollEnabledProperty.PropertyName)
|
||||
UpdateHasScrollEnabled();
|
||||
else if (e.PropertyName == Map.HasZoomEnabledProperty.PropertyName)
|
||||
UpdateHasZoomEnabled();
|
||||
}
|
||||
|
||||
void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
switch (e.Action)
|
||||
{
|
||||
case NotifyCollectionChangedAction.Add:
|
||||
foreach (Pin pin in e.NewItems)
|
||||
LoadPin(pin);
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Move:
|
||||
// no matter
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Remove:
|
||||
foreach (Pin pin in e.OldItems)
|
||||
RemovePin(pin);
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Replace:
|
||||
foreach (Pin pin in e.OldItems)
|
||||
RemovePin(pin);
|
||||
foreach (Pin pin in e.NewItems)
|
||||
LoadPin(pin);
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Reset:
|
||||
ClearPins();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateVisibleRegion()
|
||||
{
|
||||
if (Control == null || Element == null)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
var boundingBox = Control.BoundingRectangle;
|
||||
|
||||
if (boundingBox != null)
|
||||
{
|
||||
var center = new Position(boundingBox.Center.Latitude, boundingBox.Center.Longitude);
|
||||
var latitudeDelta = Math.Abs(boundingBox.Northwest.Latitude - boundingBox.Southeast.Latitude);
|
||||
var longitudeDelta = Math.Abs(boundingBox.Northwest.Longitude - boundingBox.Southeast.Longitude);
|
||||
Element.SetVisibleRegion(new MapSpan(center, latitudeDelta, longitudeDelta));
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
async Task UpdateIsShowingUser(bool moveToLocation = true)
|
||||
{
|
||||
if (Control == null || Element == null) return;
|
||||
|
||||
if (Element.IsShowingUser)
|
||||
{
|
||||
var location = await GetCurrentLocation();
|
||||
if(location != null)
|
||||
LoadUserPosition(location, moveToLocation);
|
||||
|
||||
if (Control == null || Element == null) return;
|
||||
|
||||
if (_timer == null)
|
||||
{
|
||||
_timer = new DispatcherTimer();
|
||||
_timer.Tick += async (s, o) => await UpdateIsShowingUser(moveToLocation: false);
|
||||
_timer.Interval = TimeSpan.FromSeconds(15);
|
||||
}
|
||||
|
||||
if (!_timer.IsEnabled)
|
||||
_timer.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
_timer?.Stop();
|
||||
|
||||
if (Control.Children.Contains(_userPositionPin))
|
||||
Control.Children.Remove(_userPositionPin);
|
||||
}
|
||||
}
|
||||
|
||||
void LoadPins()
|
||||
{
|
||||
foreach (var pin in Element.Pins)
|
||||
LoadPin(pin);
|
||||
}
|
||||
|
||||
void ClearPins()
|
||||
{
|
||||
Control.Children.Clear();
|
||||
}
|
||||
|
||||
void RemovePin(Pin pinToRemove)
|
||||
{
|
||||
var pushPin = Control.Children.Cast<FormsPushPin>().FirstOrDefault(x => x.Pin == pinToRemove);
|
||||
|
||||
if (pushPin != null)
|
||||
Control.Children.Remove(pushPin);
|
||||
}
|
||||
|
||||
void LoadPin(Pin pin)
|
||||
{
|
||||
Control.Children.Add(new FormsPushPin(pin));
|
||||
}
|
||||
|
||||
void UpdateMapType()
|
||||
{
|
||||
switch (Element.MapType)
|
||||
{
|
||||
case MapType.Street:
|
||||
Control.Mode = new RoadMode();
|
||||
break;
|
||||
case MapType.Satellite:
|
||||
Control.Mode = new AerialMode();
|
||||
break;
|
||||
case MapType.Hybrid:
|
||||
Control.Mode = new AerialMode(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MoveToRegion(MapSpan span)
|
||||
{
|
||||
var nw = new Location
|
||||
{
|
||||
Latitude = span.Center.Latitude + span.LatitudeDegrees / 2,
|
||||
Longitude = span.Center.Longitude - span.LongitudeDegrees / 2
|
||||
};
|
||||
var se = new Location
|
||||
{
|
||||
Latitude = span.Center.Latitude - span.LatitudeDegrees / 2,
|
||||
Longitude = span.Center.Longitude + span.LongitudeDegrees / 2
|
||||
};
|
||||
|
||||
Control.SetView(new LocationRect(nw, se));
|
||||
}
|
||||
|
||||
FormsPushPin _userPositionPin;
|
||||
|
||||
void LoadUserPosition(GeoCoordinate userCoordinate, bool center)
|
||||
{
|
||||
if (Control == null || Element == null) return;
|
||||
|
||||
var userPosition = new Location
|
||||
{
|
||||
Latitude = userCoordinate.Latitude,
|
||||
Longitude = userCoordinate.Longitude
|
||||
};
|
||||
|
||||
if (Control.Children.Contains(_userPositionPin))
|
||||
Control.Children.Remove(_userPositionPin);
|
||||
|
||||
_userPositionPin = new FormsPushPin(new Pin() { Position = new Position(userCoordinate.Latitude, userCoordinate.Longitude) });
|
||||
|
||||
Control.Children.Add(_userPositionPin);
|
||||
|
||||
if (center)
|
||||
{
|
||||
Control.Center = userPosition;
|
||||
Control.ZoomLevel = 13;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateHasZoomEnabled()
|
||||
{
|
||||
}
|
||||
|
||||
void UpdateHasScrollEnabled()
|
||||
{
|
||||
}
|
||||
|
||||
bool _isDisposed;
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (_isDisposed)
|
||||
return;
|
||||
|
||||
if (disposing)
|
||||
{
|
||||
_timer?.Stop();
|
||||
_timer = null;
|
||||
|
||||
if (Control != null)
|
||||
{
|
||||
Control.ViewChangeOnFrame -= Control_ViewChangeOnFrame;
|
||||
}
|
||||
|
||||
if (Element != null)
|
||||
{
|
||||
MessagingCenter.Unsubscribe<Map, MapSpan>(this, "MapMoveToRegion");
|
||||
((ObservableCollection<Pin>)Element.Pins).CollectionChanged -= OnCollectionChanged;
|
||||
}
|
||||
}
|
||||
|
||||
_isDisposed = true;
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
|
||||
/* Tools */
|
||||
Task<GeoCoordinate> GetCurrentLocation()
|
||||
{
|
||||
TaskCompletionSource<GeoCoordinate> taskCompletionSource = new TaskCompletionSource<GeoCoordinate>();
|
||||
|
||||
GeoCoordinateWatcher watcher = new GeoCoordinateWatcher();
|
||||
watcher.StatusChanged += (sender, e) =>
|
||||
{
|
||||
switch (e.Status)
|
||||
{
|
||||
case GeoPositionStatus.Disabled:
|
||||
watcher.Stop();
|
||||
taskCompletionSource.SetResult(null);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
watcher.PositionChanged += (sender, e) =>
|
||||
{
|
||||
watcher.Stop();
|
||||
taskCompletionSource.SetResult(e.Position.Location);
|
||||
};
|
||||
watcher.Start();
|
||||
|
||||
return taskCompletionSource.Task;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
using System.Reflection;
|
||||
using System.Resources;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using Xamarin.Forms.Maps;
|
||||
using Xamarin.Forms.Maps.WPF;
|
||||
using Xamarin.Forms.Platform.WPF;
|
||||
|
||||
[assembly: AssemblyTitle("Xamarin.Forms.Maps.WPF")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Xamarin.Forms.Maps.WPF")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
[assembly: ExportRenderer(typeof(Map), typeof(MapRenderer))]
|
||||
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,63 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Ce code a été généré par un outil.
|
||||
// Version du runtime :4.0.30319.42000
|
||||
//
|
||||
// Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
|
||||
// le code est régénéré.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Xamarin.Forms.Maps.WPF.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Une classe de ressource fortement typée destinée, entre autres, à la consultation des chaînes localisées.
|
||||
/// </summary>
|
||||
// Cette classe a été générée automatiquement par la classe StronglyTypedResourceBuilder
|
||||
// à l'aide d'un outil, tel que ResGen ou Visual Studio.
|
||||
// Pour ajouter ou supprimer un membre, modifiez votre fichier .ResX, puis réexécutez ResGen
|
||||
// avec l'option /str ou régénérez votre projet VS.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retourne l'instance ResourceManager mise en cache utilisée par cette classe.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Xamarin.Forms.Maps.WPF.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remplace la propriété CurrentUICulture du thread actuel pour toutes
|
||||
/// les recherches de ressources à l'aide de cette classe de ressource fortement typée.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,117 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
|
@ -0,0 +1,26 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Ce code a été généré par un outil.
|
||||
// Version du runtime :4.0.30319.42000
|
||||
//
|
||||
// Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
|
||||
// le code est régénéré.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Xamarin.Forms.Maps.WPF.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
|
@ -0,0 +1,97 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{89B0DB73-A32E-447C-9390-A2A59D89B2E4}</ProjectGuid>
|
||||
<OutputType>library</OutputType>
|
||||
<RootNamespace>Xamarin.Forms.Maps.WPF</RootNamespace>
|
||||
<AssemblyName>Xamarin.Forms.Maps.WPF</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.Maps.MapControl.WPF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Maps.MapControl.WPF.1.0.0.3\lib\net40-Client\Microsoft.Maps.MapControl.WPF.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Device" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xaml">
|
||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||
</Reference>
|
||||
<Reference Include="WindowsBase" />
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="FormsMaps.cs" />
|
||||
<Compile Include="GeocoderBackend.cs" />
|
||||
<Compile Include="MapRenderer.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<Compile Include="FormsPushPin.cs" />
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Xamarin.Forms.Core\Xamarin.Forms.Core.csproj">
|
||||
<Project>{57b8b73d-c3b5-4c42-869e-7b2f17d354ac}</Project>
|
||||
<Name>Xamarin.Forms.Core</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Xamarin.Forms.Maps\Xamarin.Forms.Maps.csproj">
|
||||
<Project>{7d13bac2-c6a4-416a-b07e-c169b199e52b}</Project>
|
||||
<Name>Xamarin.Forms.Maps</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Xamarin.Forms.Platform.WPF\Xamarin.Forms.Platform.WPF.csproj">
|
||||
<Project>{140bc260-8b15-4d3a-b1b0-ddd8072918cc}</Project>
|
||||
<Name>Xamarin.Forms.Platform.WPF</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Maps.MapControl.WPF" version="1.0.0.3" targetFramework="net45" />
|
||||
</packages>
|
|
@ -141,6 +141,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.ControlGaller
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Platform.WPF", "Xamarin.Forms.Platform.WPF\Xamarin.Forms.Platform.WPF.csproj", "{140BC260-8B15-4D3A-B1B0-DDD8072918CC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Forms.Maps.WPF", "Xamarin.Forms.Maps.WPF\Xamarin.Forms.Maps.WPF.csproj", "{89B0DB73-A32E-447C-9390-A2A59D89B2E4}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||
Xamarin.Forms.Controls.Issues\Xamarin.Forms.Controls.Issues.Shared\Xamarin.Forms.Controls.Issues.Shared.projitems*{0a39a74b-6f7a-4d41-84f2-b0ccdce899df}*SharedItemsImports = 4
|
||||
|
@ -2572,6 +2574,58 @@ Global
|
|||
{140BC260-8B15-4D3A-B1B0-DDD8072918CC}.Release|x64.Build.0 = Release|Any CPU
|
||||
{140BC260-8B15-4D3A-B1B0-DDD8072918CC}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{140BC260-8B15-4D3A-B1B0-DDD8072918CC}.Release|x86.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|Templates.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|Templates.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|x64.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Ad-Hoc|x86.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|Any CPU.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|ARM.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|ARM.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|iPhone.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|iPhone.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|Templates.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|Templates.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|x64.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|x64.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|x86.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.AppStore|x86.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|Templates.ActiveCfg = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|Templates.Build.0 = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|iPhone.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|Templates.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|Templates.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|x64.Build.0 = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@ -2629,6 +2683,7 @@ Global
|
|||
{83790029-272E-45AF-A41D-E7716684E5B8} = {29AC50BF-B4FB-450B-9386-0C5AD4B84226}
|
||||
{03A51E5B-0A1E-41F0-AAE3-4B19406F7340} = {4F5E2D21-17F6-4A42-B8FB-D03D82E24EC8}
|
||||
{140BC260-8B15-4D3A-B1B0-DDD8072918CC} = {29AC50BF-B4FB-450B-9386-0C5AD4B84226}
|
||||
{89B0DB73-A32E-447C-9390-A2A59D89B2E4} = {132FB9A4-613F-44CE-95D5-758D32D231DD}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {650AE971-2F29-46A8-822C-FB4FCDC6A9A0}
|
||||
|
|
Загрузка…
Ссылка в новой задаче