MapControl for Windows Forms and WPF

The MapControl class enables you to display a symbolic or photorealistic map in your Windows Forms or WPF desktop application. This is one of several wrapped Universal Windows Platform controls that are available for Windows Forms and WPF applications as part of a feature called XAML Islands. For more information, see UWP controls in desktop applications (XAML Islands).

This control shows rich and customizable map data including road maps, aerial, 3D, views, directions, search results, and traffic. You can also display the user's location, directions, and points of interest.

MapControl example


If you have feedback about this control, create a new issue in the microsoft-ui-xaml repo and leave your comments there.

About MapControl

This control wraps an instance of the UWP Windows.UI.Xaml.Controls.Maps.MapControl class. The WPF version of this control is located in the Microsoft.Toolkit.Wpf.UI.Controls namespace. The Windows Forms version is located in the Microsoft.Toolkit.Forms.UI.Controls namespace. You can find additional related types (such as enums and event args classes) in the Microsoft.Toolkit.Win32.UI.Controls.Interop.WinRT namespace.


Before you can use this control, you must follow these instructions to configure your project to support XAML Islands.

Known issues and limitations

See our list of known issues for WPF and Windows Forms controls in the Windows Community Toolkit repo.


<Window x:Class="TestSample.MainWindow" ...

<controls:MapControl x:Name="mapControl" DockPanel.Dock="Top" ZoomInteractionMode="GestureAndControl"
    TiltInteractionMode="GestureAndControl" MapServiceToken="EnterYourAuthenticationKeyHere" />

Code example

private async void MapControl_Loaded(object sender, RoutedEventArgs e)
    // Specify a known location.
    BasicGeoposition cityPosition = new BasicGeoposition() { Latitude = 47.604, Longitude = -122.329 };
    var cityCenter = new Geopoint(cityPosition);

    // Set the map location.
    await (sender as MapControl).TrySetViewAsync(cityCenter, 12);
Private Async Sub MapControl_Loaded(sender As Object, e As RoutedEventArgs)
    Dim cityPosition As BasicGeoposition = New BasicGeoposition() With {
        .Latitude = 47.604,
        .Longitude = -122.329
    Dim cityCenter = New Geopoint(cityPosition)
    Await (TryCast(sender, MapControl)).TrySetViewAsync(cityCenter, 12)
End Sub


The following properties wrap corresponding properties of the wrapped UWP Windows.UI.Xaml.Controls.Maps.MapControl object. See the links in this table for more information about each property.

Property Type Description
ActualCamera MapCamera Wraps the ActualCamera property.
BusinessLandmarksEnabled bool Wraps the BusinessLandmarksEnabled property.
BusinessLandmarksVisible bool Wraps the BusinessLandmarksVisible property.
Center Geopoint Wraps the Center property.
CustomExperience MapCustomExperience Wraps the CustomExperience property.
DesiredPitch double Wraps the DesiredPitch property.
Heading double Wraps the Heading property.
Is3DSupported bool Wraps the Is3DSupported property.
IsStreetsideSupported bool Wraps the IsStreetsideSupported property.
LandmarksVisible bool Wraps the LandmarksVisible property.
Layers IList<MapLayer> Wraps the Layers property.
LoadingStatus MapLoadingStatus Wraps the LoadingStatus property.
MapColorScheme ColorScheme Wraps the MapColorScheme property.
MapElements IList<MapElement> Wraps the MapElements property.
MapProjection MapProjection Wraps the MapProjection property.
MapServiceToken string Wraps the MapServiceToken property.
MaxZoomLevel double Wraps the MaxZoomLevel property.
MinZoomLevel double Wraps the MinZoomLevel property.
PanInteractionMode MapPanInteractionMode Wraps the PanInteractionMode property.
PedestrianFeaturesVisible bool Wraps the PedestrianFeaturesVisible property.
Pitch double Wraps the Pitch property.
Region string Wraps the Region property.
RotateInteractionMode MapInteractionMode Wraps the RotateInteractionMode property.
Routes IList<MapRouteView> Wraps the Routes property.
Scene MapScene Wraps the Scene property.
Style MapStyle Wraps the Style property.
StyleSheet MapStyleSheet Wraps the StyleSheet property.
TargetCamera MapCamera Wraps the TargetCamera property.
TileSources IList<MapTileSource> Wraps the TileSources property.
TiltInteractionMode MapInteractionMode Wraps the TiltInteractionMode property.
TrafficFlowVisible bool Wraps the TrafficFlowVisible property.
TransitFeaturesEnabled bool Wraps the TransitFeaturesEnabled property.
TransitFeaturesVisible bool Wraps the TransitFeaturesVisible property.
TransformOrigin Point Wraps the TransformOrigin property.
WatermarkMode MapWatermarkMode Wraps the WatermarkMode property.
ZoomInteractionMode MapInteractionMode Wraps the ZoomInteractionMode property.
ZoomLevel double Wraps the ZoomLevel property.


The following methods wrap corresponding methods of the wrapped UWP Windows.UI.Xaml.Controls.Maps.MapControl object. See the links in this table for more information about each method.

Method Return Type Description
FindMapElementsAtOffset(Point) IReadOnlyList<MapElement> Wraps the FindMapElementsAtOffset(Point) method.
FindMapElementsAtOffset(Point, double) IReadOnlyList<MapElement> Wraps the FindMapElementsAtOffset(Point, double) method.
GetLocationFromOffset(Point, Geopoint) void Wraps the GetLocationFromOffset(Point, Geopoint) method.
GetLocationFromOffset(Point, AltitudeReferenceSystem, Geopoint) void Wraps the GetLocationFromOffset(Point, AltitudeReferenceSystem, Geopoint) method.
GetOffsetFromLocation void Wraps the GetOffsetFromLocation method.
GetVisibleRegion Geopath Wraps the GetVisibleRegion method.
IsLocationInView void Wraps the IsLocationInView method.
StartContinuousPan void Wraps the StartContinuousPan method.
StartContinuousRotate void Wraps the StartContinuousRotate method.
StartContinuousTilt void Wraps the StartContinuousTilt method.
StartContinuousZoom void Wraps the StartContinuousZoom method.
StopContinuousPan void Wraps the StopContinuousPan method.
StopContinuousRotate void Wraps the StopContinuousRotate method.
StopContinuousTilt void Wraps the StopContinuousTilt method.
StopContinuousZoom void Wraps the StopContinuousZoom method.
TryGetLocationFromOffset(Point, Geopoint) bool Wraps the TryGetLocationFromOffset(Point, Geopoint) method.
TryGetLocationFromOffset(Point, AltitudeReferenceSystem, Geopoint) bool Wraps the TryGetLocationFromOffset(Point, AltitudeReferenceSystem, Geopoint) method.
TryPanAsync bool Wraps the TryPanAsync method.
TryPanToAsync bool Wraps the TryPanToAsync method.
TryRotateAsync bool Wraps the TryRotateAsync method.
TryRotateToAsync bool Wraps the TryRotateToAsync method.
TrySetSceneAsync(MapScene) bool Wraps the TrySetSceneAsync(MapScene) method.
TrySetSceneAsync(MapScene, MapAnimationKind) bool Wraps the TrySetSceneAsync(MapScene, MapAnimationKind) method.
TrySetViewAsync(Geopoint) bool Wraps the TrySetViewAsync(Geopoint) method.
TrySetViewAsync(Geopoint, Nullable<double>) bool Wraps the TrySetViewAsync(Geopoint, Nullable<double>) method.
TrySetViewAsync(Geopoint, Nullable<double>, Nullable<double>, Nullable<double>) bool Wraps the TrySetViewAsync(Geopoint, Nullable<double>, Nullable<double>, Nullable<double>) method.
TrySetViewAsync(Geopoint, Nullable<double>, Nullable<double>, Nullable<double>, MapAnimationKind) bool Wraps the TrySetViewAsync(Geopoint, Nullable<double>, Nullable<double>, Nullable<double>, MapAnimationKind) method.
TryTiltAsync bool Wraps the TryTiltAsync method.
TryTiltToAsync bool Wraps the TryTiltToAsync method.
TryZoomInAsync bool Wraps the TryZoomInAsync method.
TryZoomOutAsync bool Wraps the TryZoomOutAsync method.
TryZoomToAsync bool Wraps the TryZoomToAsync method.


The following events wrap corresponding events of the wrapped UWP Windows.UI.Xaml.Controls.Maps.MapControl object. See the links in this table for more information about each event.

Event Description
ActualCameraChanged Wraps the ActualCameraChanged event.
ActualCameraChanging Wraps the ActualCameraChanging event.
CenterChanged Wraps the CenterChanged event.
CustomExperienceChanged Wraps the CustomExperienceChanged event.
HeadingChanged Wraps the HeadingChanged event.
LoadingStatusChanged Wraps the LoadingStatusChanged event.
MapContextRequested Wraps the MapContextRequested event.
MapDoubleTapped Wraps the MapDoubleTapped event
MapElementClick Wraps the MapElementClick event.
MapElementPointerEntered Wraps the MapElementPointerEntered event.
MapElementPointerExited Wraps the MapElementPointerExited event.
MapHolding Wraps the MapHolding event.
MapRightTapped Wraps the MapRightTapped event.
MapTapped Wraps the MapTapped event.
PitchChanged Wraps the PitchChanged event.
TargetCameraChanged Wraps the TargetCameraChanged event.
TransformOriginChanged Wraps the TransformOriginChanged event.
ZoomLevelChanged Wraps the ZoomLevelChanged event.


Device family .NET 4.6.2, Windows 10 (introduced v10.0.17709.0)
Namespace Windows Forms: Microsoft.Toolkit.Forms.UI.Controls
WPF: Microsoft.Toolkit.Wpf.UI.Controls
NuGet package Windows Forms: Microsoft.Toolkit.Forms.UI.Controls
WPF: Microsoft.Toolkit.Wpf.UI.Controls