2010-05-10 3 views
5

konnte ich meine Silverlight Bing Karte akzeptiert Mousclicks machen und wandelt sie in Pushpins in C#. Jetzt möchte ich einen Text neben dem PushPin als eine Beschreibung anzeigen, die erscheint, wenn die Maus über den Pin geht, ich habe keine Ahnung, wie das geht. Was sind die Methoden, die es mir ermöglichen, das zu tun?Silverlight - Hinzufügen von Text PushPin in Bing Maps über C#

Dies ist der C# -Code:

public partial class MainPage : UserControl 

{ privaten MapLayer m_PushpinLayer;

public MainPage() 
{ 
    InitializeComponent(); 
    base.Loaded += OnLoaded; 
} 

private void OnLoaded(object sender, RoutedEventArgs e) 
{ 
    base.Loaded -= OnLoaded; 

m_PushpinLayer = new MapLayer(); 
x_Map.Children.Add(m_PushpinLayer); 
    x_Map.MouseClick += OnMouseClick; 
} 

private void AddPushpin(double latitude, double longitude) 
{ 
    Pushpin pushpin = new Pushpin(); 
    pushpin.MouseEnter += OnMouseEnter; 
    pushpin.MouseLeave += OnMouseLeave; 
    m_PushpinLayer.AddChild(pushpin, new Location(latitude, longitude), PositionOrigin.BottomCenter); 
} 

private void OnMouseClick(object sender, MapMouseEventArgs e) 
{ 
    Point clickLocation = e.ViewportPoint; 
    Location location = x_Map.ViewportPointToLocation(clickLocation); 
    AddPushpin(location.Latitude, location.Longitude); 
} 

private void OnMouseLeave(object sender, MouseEventArgs e) 
{ 
    Pushpin pushpin = sender as Pushpin; 

    // remove the pushpin transform when mouse leaves 
    pushpin.RenderTransform = null; 
} 

private void OnMouseEnter(object sender, MouseEventArgs e) 
{ 
    Pushpin pushpin = sender as Pushpin; 

    // scaling will shrink (less than 1) or enlarge (greater than 1) source element 
    ScaleTransform st = new ScaleTransform(); 
    st.ScaleX = 1.4; 
    st.ScaleY = 1.4; 

    // set center of scaling to center of pushpin 
    st.CenterX = (pushpin as FrameworkElement).Height/2; 
    st.CenterY = (pushpin as FrameworkElement).Height/2; 

    pushpin.RenderTransform = st; 
} 

}

Antwort

7

Sie haben zwei Wege zu gehen:

(1) Legen Sie beliebig UIElement in PushPinLayer.AddChild passieren. Die AddChild Methode akzeptieren und jede UIElement, wie dieses Gitter ein Bild und einen Textblock enthält:

MapLayer m_PushpinLayer = new MapLayer(); 
Your_Map.Children.Add(m_PushpinLayer); 
Image image = new Image(); 
image.Source = ResourceFile.GetBitmap("Images/Pushpin.png", From.This); 
TextBlock textBlock = new TextBlock(); 
textBlock.Text = "My Pushpin"; 
Grid grid = new Grid(); 
grid.Children.Add(image); 
grid.Children.Add(textBlock); 

m_PushpinLayer.AddChild(grid, 
    new Microsoft.Maps.MapControl.Location(42.658, -71.137), 
     PositionOrigin.Center); 

(2) Erstellen eines nativen PushPin Objekt in PushpinLayer.AddChild passieren, sondern setzen erste Template-Eigenschaft es ist. Beachten Sie, dass PushPin der ContentControls sind, und eine Template-Eigenschaft hat, die von einer Ressource definiert in XAML festgelegt werden kann:

MapLayer m_PushpinLayer = new MapLayer(); 
Your_Map.Children.Add(m_PushpinLayer); 
Pushpin pushpin = new Pushpin(); 
pushpin.Template = Application.Current.Resources["PushPinTemplate"] 
    as (ControlTemplate); 
m_PushpinLayer.AddChild(pushpin, 
    new Microsoft.Maps.MapControl.Location(42.658, -71.137), 
     PositionOrigin.Center); 

...

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/client/2007" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
> 
    <ControlTemplate x:Key="PushPinTemplate"> 
     <Grid> 
      <Image Source="Images/Pushpin.png" /> 
      <TextBlock Text="My Pushpin" /> 
     </Grid> 
    </ControlTemplate> 
</ResourceDictionary> 

Viel Glück, Jim McCurdy

Gesicht To Face Software und YinYangMoney

+0

Dank Jim .. Das war sehr hilfreich :) Es hat nicht funktioniert zuerst .. Bis ich das Raster geändert.Fügen Sie zu grid.Childre n.Add ... Danke nochmal! – Morano88