ThinkGeo.com    |     Documentation    |     Premium Support

Resize Map In a Grid Control

I have a map control that is contained in a grid cell. I can't get the map to appear unless I hard code a height/width value:


<my:Map x:Name="Map1"

                Background="Coral"

                Height="375"

                Width="1000"

                HorizontalAlignment="Stretch"

                VerticalAlignment="Stretch">

</my:Map>


 


 


The grid has a single column with three rows:


 


ROW #1


Grid Splitter Control - ROW #2


ROW #3


The map is contained in Row #3. I want the map to fill the entire cell and to resize itself when the size of the browser changes as well as when the grid splitter control changes (grid cell grows/shinks).  Can you point me in the right direction to which attributes of the map control  I need to set to accomplish this behavior?  I've tried setting the Height/Width values to "Auto", but that doesn't work. 


Thanks!


Bob


 


 


 



Bob, 
  
 I think this is the biggest disadvantage of our control. We need to know the exactly width and height when we calculate the tiles; but in Silverlight if you set the width and height to Auto, we cannot get the exactly value in pixel before the UI thread completes. That’s why we need user to set the exactly width and height on the map. Otherwise, it has some issue. 
  
 I think you can try the Resize event to change the width and height dynamically temporary; also we have written this issue down so that we can do some research on it to support auto size. 
  
 If you have more questions please let me know. 
  
 Thanks, 
 Howard

Does any one have a good workaround for this?  I would like to use this control in a center of a docking pane, so the size of the map will be changing all the time.


Is this something that might be fixed for the final release, so the size does not need to be hardcoded?


 



Hi Kevin,


I think you could use the SizeChanged event of the docking pane, and in the event you can change the size of the map control dynamically like this:


private void LayoutRoot_SizeChanged(object sender, SizeChangedEventArgs e)
{
    Map1.Width = e.NewSize.Width;
    Map1.Height = e.NewSize.Height;
    Map1.Refresh();
}


Any more questions please let me know.
Thanks,
Sun

Hi Sun, 
  
 The Silverlight grid control does not seem to catch the browser window resize event. Hence the LayoutRoot_SizeChanged event handler does not execute when the browser window is resized. Another option would be to call the Silverlight map from ASP.NET on browser window resize I can’t call the Silverlight map from ASP.NET through the SilverlightMapConnector.  
  
 This is a very important feature for us and we would appreciate a fix from your end. 
  
 Thanks, 
  
 Nirish

Nirish,


We have done a sample to test the resize event, and it works fine in our end. In the sample, we just add the Silverlight map control to a Silverlight user control page, then in the asp.net page use a SilverlightMapConnector to load the Silverlight user control. Please get the sample from the attachment and take a look.
Any more questions please let me know.
Thanks,
Sun 

1470-Post6108.zip (18.1 KB)

Thanks Sun! That’s exactly what I was after. :) 
  
 Cheers, 
  
 Nirish

You are always welcome, Nirish. 
  
 Any more questions please let me know. 
  
 Thanks, 
  
 Sun