2010-05-10 18 views
5

Tôi đã có thể tạo bản đồ Bing màu bạc của mình chấp nhận Mousclicks và chuyển đổi chúng thành Pushpins trong C#. Bây giờ tôi muốn hiển thị một văn bản bên cạnh PushPin như là một mô tả xuất hiện khi con chuột đi qua các pin, tôi không có đầu mối làm thế nào để làm điều đó. Các phương pháp cho phép tôi làm điều này là gì?Silverlight - Thêm văn bản vào đinh ghim trong Bản đồ Bing qua C#

Đây là mã C#:

public partial class MainPage : UserControl 

{ tin 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; 
} 

}

Trả lời

7

Bạn có 2 cách để đi:

(1) Tạo bất kỳ UIElement để vượt qua thành PushPinLayer.AddChild. Phương pháp addChild sẽ chấp nhận và bất kỳ UIElement, như lưới này có chứa một hình ảnh và một TextBlock:

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) Tạo một đối tượng đinh ghim bản địa để vượt qua thành PushpinLayer.AddChild, nhưng trước tiên thiết lập nó là tài sản Mẫu. Lưu ý rằng Ghim ẩn của những ContentControls, và có một tài sản Mẫu có thể được thiết lập từ một tài nguyên quy định tại XAML:

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> 

Chúc may mắn, Jim McCurdy

khuôn mặt Đối với phần mềm và YinYangMoney

+0

Cảm ơn Jim .. Điều đó rất hữu ích :) Nó không hoạt động lúc đầu .. Cho đến khi tôi thay đổi lưới.Thêm vào lưới.Childre n.Thêm ... Cảm ơn một lần nữa! – Morano88