ThinkGeo.com    |     Documentation    |     Premium Support

Custom legend with adornment layer

I have a legend in my application using groupBox with 3 labels whose text I adjust programatically, then make the legend visible.  It works but it is not elegant (picture attached).  I'm trying to see if the Adornment Layer would give me more flexibility.  I have the LegendAdornmentLayer example but it unfortunately doesn't compile:


Error 1 The type 'System.Collections.Specialized.INotifyCollectionChanged' is defined in an assembly that is not referenced. You must add a reference to assembly 'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. C:\temp\ThinkGeo Projects\LegendAdornmentLayer_CS_100215\LegendAdornmentLayer\TestForm.cs 40 13 LegendAdornmentLayer

 


Looking at the legend I have in the picture does it look like using an adornment layer would cover my needs?


 



Michael, 
  
 You can easy to make the sample compile, you need to add a "WindowsBase" reference from .net framework, right click the project, and select "Add Reference", choose ".NET" tab, find WindowsBase and click OK. The reason is that our new version of MapSuiteCore upgraded, so you need to add additional reference. 
  
 The good news for you is that we are working on built-in Legend, I think you will get it soon. 
  
 Thanks, 
 James

James, thanks on both counts then.  Project is running - will hold out then for the built-in legend control.

Michael, 
  
 Thanks for your updates and letting us know your stauts. 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


Hello, I am in the process of upgrading from the legacy controls to the current version. I am at the point where I need a usable legend and am wondering if the built in legend control will be available in the 5.5 release. If not can you post a VB example of how to build a legend in a treeview control? I need to be able to fill it showing the layer symbols as well as symbols from a ValueStyle. I need the users to be able to hide/show layers like the old control used to do, so using the Adornment Layer as a legend won’t work. 
 Thanks, 
 Jesse

Hi Jesse, 
  
 Here is a sample about how to use the new LegendAdornmentLayer: wiki.thinkgeo.com/wiki/Map_Suite_Desktop_Edition_All_Samples#Show_A_Legend 
  
 I think you need to implement refresh in currentExtentChanged event, new LegendAdornmentLayer only support render related logics. 
  
 And I think the show/hide layer checkbox should be in Map1.MapTools.OverlaySwitcher. 
  
 Regards, 
  
 Don

Thanks for the response Don. I have downloaded that sample before and it is a WPF example which i don't have installed or running. I'm using the Desktop Edition. Is there a Desktop example out there somewhere?


Also, does this mean that there won't be a separate legend control? I really didn't want to be forced to use up map space with a legend sitting on top of everything.


Also, you didn't address my question of getting the symbol information out of each layer and each layer's ValueStyle item. I used to use the SymbolDisplayer control because I could put in the symbol and return a Bitmap, but it looks like that is gone as well. If I could figure out how to get it out in an accurate little layer symbol image I can use a treeview control for my legend.


Thanks for the help,

Jesse


 



Hi Jesse,  
  
 1. Is there a Desktop example out there somewhere? 
 You can open the class file and learn how to use the new LegendAdornmentLayer from code. Sorry we don’t have a desktop version. 
  
 2. Does this mean that there won’t be a separate legend control? 
 I think so, our plan is integrate many useful control under AdornmentLayer. 
  
 3. How to getting the symbol information out of each layer and each layer’s ValueStyle item. 
 Sorry I don’t know SymbolDisplayer control and how it works, but in the new LegendAdornmentLayer you need directly set style to LegendItem. 
 So I think if you want show dynamic in legend, a simple way is you build a function in ExtentChanged event and then get style from layers and then update legend items there.  
  
 Regards, 
  
 Don