[Silverlight] Utiliser le contrôle Virtual Earth
Virtual Earth qui est le concurrent de google map vient de faire son apparition en Silverlight 2 et 3.
Pour commencer, direction le site connect pour télécharger le MSI:
https://connect.microsoft.com/silverlightmapcontrolctp/Downloads
Vous trouverez le code de ce post ici et vous pouvez tester un exemple là.
Vous le savez peut-être, Virtual Earth existe déjà en HTML, Ajax, Winforms et WPF alors où se situe silverlight ?
Image du blog http://johanneskebeck.spaces.live.com
Créer son premier projet avec Virtual Earth Control
Après avoir créé votre projet Silverlight 2 ou 3, il vous faut rajouter une référence à Microsoft.VirtualEarth.MapControl.dll installé avec le SDK:
C:\Program Files\Microsoft Virtual Earth Silverlight Map Control\CTP\Libraries
<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:MapControl="clr-namespace:Microsoft.VirtualEarth.MapControl;
assembly=Microsoft.VirtualEarth.MapControl"
Width="Auto" Height="Auto">
<Grid x:Name="LayoutRoot" Background="White">
<MapControl:Map Width="Auto" Height="Auto"></MapControl:Map>
</Grid>
</UserControl>
Et vous voilà en présence d’une belle carte !

Vous pouvez changer le mode en C# ou en XAML:
<MapControl:Map Mode="AerialWithLabels" Width="Auto" Height="Auto"/>
L’ajout de contrôle (image, bouton…)
Vous pouvez ajouter des calques qui peuvent contenir des images, des boutons etc…
<MapControl:Map x:Name="map" MouseClick="Map_MouseClick"
Width="Auto" Height="Auto">
<MapControl:Map.Children>
<MapControl:MapLayer x:Name="Layer"/>
</MapControl:Map.Children>
</MapControl:Map>
private void Map_MouseClick(object sender, MapMouseEventArgs e)
{
Button myButton = new Button();
myButton.Width = 50;
myButton.Height = 50;
myButton.Content = "Click me";
myButton.Click += new RoutedEventHandler(myButton_Click);
myButton.SetValue(MapLayer.MapPositionMethodProperty, PositionMethod.Center);
myButton.SetValue(MapLayer.MapPositionProperty, new Location(20, 20));
(map.FindName("Layer") as MapLayer).AddChild(myButton);
}
void myButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello");
}