|     Blog    |     Wiki    |     Support

.Net Core changes

I’m in the processing of upgrading to .Net Core, and I’ve come across a few issues/questions:

  1. Before switching over to the new .net core packages, things like Map.ZoomLevelSet.GetZoomLevels(), the TrackOverlay, the AdornmentOverlay, etc. were all declared and initialized. With the new packages, they are all null, and I have to go through and manually set them. Is this intended?

  2. For TextStyles, I noticed that the BestPlacement property is no longer there. What is the replacement for this?

  3. For PointStyles using a font character: previously we would set the CharacterIndex property to let the style know the index of the character in the selected font family to use. I don’t see that property anymore. What is the replacement for it?

  4. For AreaStyles, there used to be a property called Advanced that contained FillCustomBrush which allowed me to set it to a new GeoHatchBrush. The Advanced property is no longer there. Would I just use FillBrush now and set that to the new GeoHatchBrush?

  5. Proj4Projection. I no longer see a nuget package for this. I need to do stuff like Proj4Projection proj4 = new Proj4Projection(4326, 3857);. What is the new way of doing this?

  6. AreaStyle no longer contains the property FillSolidBrush. I see there is a FillBrush property, but that doesn’t contain Color. I need to be able to get the color components from the style. This is what I could do previously: myAreaStyle.FillSolidBrush.Color.BlueComponent. But now there’s no FillSolidBrush and no Color in the FillBrush property.

  7. In the map’s ExtentInteractiveOverlay, there is no longer a LeftClickDragKey property. Is there a replacement for this?


Hi Dan,

Because the .net core is a totally new version, support team are keep learning everything about it.

For make the answer more exactly, I think I will reply you when our developer back from vacation, before that I think our wiki page can provide some information about the new version:



Hi Dan,

Welcome to ThinkGeo.Core. Please refer below for the API changes.

  1. They are all shouldn’t be null.
    For Map.ZoomLevelSet.GetZoomLevels(), we did some testing, it works as our except (not null). Could you please give one sample code for that, to make sure we covered your scenarios.
    For TrackOverlay/EditOverlay/ExtendOverlay, it performs one bug when it is null, we already fixed that. and the changes have been applied on latest 12.0.2 release.
    For AdormentOverlay/MarkerOverlay/PopupOverlay. we didn’t meet the case it will be null. it always has default value. Could you please give one sample code for that, to make sure we covered your scenarios.

  2. For TextStyle.BestPlacement, we have changed that to TextPlacement. Because we think BestPlacement is confused, it just used to set the text’s placement.

  3. For PointStyle.CharacterIndex, we have removed this API. Instead of that, we used GlyphContent for that. you can easy to get the convert index to content. With the new API, you can easy to use more that one character.


  4. You are right. The new API is more simple to use Advanced brush for AreaStyle.

  5. With new API, Projection is one Proj4 wrapper, you can use ProjectionConveter to convert projection.

  6. In this case, you should convert the FillBrush to GeoSolidBrush, and then you can get the GeoColor.

  7. As we added Rotation function for Wpf, we redesign the key as “RotationKey” and “TrackZoomInKey”.

Because this .NetCore version have too many API changes, we cannot list all the API changes. If you meet any more issue when upgrade ThinkGeo 12.0. Please feel free to let us know that.


Perfect, thanks so much for the response!

Hi Dan,

If there is any more issue when using ThinkGeo, please feel free to let us know that.


Hi, regarding my first question, I’ve tested a few times on a brand new wpf project using ThinkGeo.UI.WPF 12.0.3, and the map’s track overlays, editoverlay, etc. are still null.

I’m simpling doing MapView mapView = new MapView() and checking it’s properties afterwards.

Okay, it looks like the MapView needs to be finished loading first before doing anything with the map. Is this intended? Before I could add the overlays, check out the track layer, etc. before the map’s Loaded event happened.

Hi Dan,

You are right, that works by our design.
The best practice is always use our map after MapView Loaded. it means that all the logic should be coded in MapView loaded event. It looks like below:

Do Not created one MapView in UI’s construct. With the new design, we can make sure the Map works fine even you didn’t set the MapUnit and ZoomLevelSet. we can set MapUnit and ZoomLevetSet when loading map.

In MapSuite 10.0 and before, we always use the Default Value for those items. We think more for your scenarios.

  1. We think MapUnit and ZoomLevelSet should have default, user should set that or those value will be set when loading Map, because the default value is incorrect, it always is Decimal Degree.
  2. Edit/Extend overlay can has default value now even didn’t load MapView, wo we added logic to make sure Edit/Extend overlay has default value in new release.

If you have any more thoughts for MapUnit and ZoomLevelSet APIs, please let us know that.


Awesome, thanks Mark! Appreciate it.

Hi Dan,

That’ my pleasure. If there is any more issue when using ThinkGeo, please feel free to let us know that.


Hi Dan, Here are a couple quick start videos about using WPF component in VS code, have a look if you are interested.