2010-10-07 21 views
5

Tôi đang sử dụng các công cụ RTM Phone 7 mới nhất (tải xuống ngay hôm nay, ngày 7 tháng 10 năm 2010).Điện thoại 7 Kiểm soát bản đồ Bing - Thêm đinh ghim khi chạm

Tôi cố gắng để làm một điều đơn giản ở đây:

khi người dùng vòi lần trên sự kiểm soát bản đồ, tôi muốn đặt một đinh ghim ở đó. cũng vậy, tôi muốn giữ hành vi tích hợp thông thường của điều khiển bản đồ (nhấn hai lần để thu phóng).

(Nếu không thể giữ cả hai hành vi, thì có thể nhấn và giữ trên bản đồ để đặt đinh ghim).

Khi cố gắng tìm này ra, tôi đã xem qua tài liệu này trong những thay đổi thực hiện cho các bản đồ điều khiển cho Phone7: http://msdn.microsoft.com/en-us/library/ff955762.aspx

Sau đó, tôi thấy lớp mới MapInputEventArgs, trong đó có một thành viên ViewportPoint.

Khi nhìn vào các ví dụ mã trên Silverlight thường xuyên kiểm soát bản đồ tôi thấy một cái gì đó như thế này:

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

     Pushpin pushpin = new Pushpin(); 
     m_PushpinLayer.AddChild(pushpin, new Location(latitude, longitude)); 
    } 

Nhưng trong trường hợp Phone7, tôi không thể tìm ra xử lý sự kiện thích hợp, và tôi không thể tìm thấy người sử dụng MapInputEventArgs trong điều khiển bản đồ. Tìm kiếm trên google chỉ cho tôi 1 kết quả !!

Vì vậy, sự kiện thích hợp cho "Nhấn một lần" và làm cách nào tôi có thể có được một ViewportPoint sau khi sự kiện này đã được kích hoạt?

Xin cảm ơn trước.

Trả lời

6

Chỉ figured này ra nếu bạn vẫn gặp vấn đề.

Các MouseLeftButtonUp và MouseLeftButtonDown Sự kiện có một phương pháp GetPosition rằng sẽ trả lại điểm bạn đang tìm kiếm

private void MapMain_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 

     Point p = e.GetPosition(this.MapMain); 
     GeoCoordinate geo = new GeoCoordinate(); 
     geo = MapMain.ViewportPointToLocation(p); 
     MapMain.ZoomLevel = 17; 
     MapMain.Center = geo; 
     //---create a new pushpin--- 
     Pushpin pin = new Pushpin(); 

     //---set the location for the pushpin--- 
     pin.Location = geo; 

     //---add the pushpin to the map--- 
     MapMain.Children.Add(pin); 
    } 
1

Được rồi, nó không đẹp, nhưng tôi có cùng một vấn đề và tôi đã đưa ra một cách giải quyết các loại đá khi bạn thả ngón tay ra khỏi màn hình. Tôi nhanh chóng một boolean:

  bool noPin = false; 

sau đó tôi sử dụng để xác định xem để phóng to hoặc chảo đang được thực hiện bởi người dùng (những ngọn lửa giữa các sự kiện MouseLeftButtonDown và MouseLeftButtonUp). Trên sự kiện Up, tôi sau đó kiểm tra xem người dùng có đang phóng to hay thu nhỏ hay không và nếu không, hãy đặt đinh ghim của tôi.

private void mHome_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     noPin = false; 
    } 

    private void mHome_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     if (!noPin) 
      PlacePushPin(); 
    } 

    private void mHome_MapPan(object sender, MapDragEventArgs e) 
    { 
     tbTemp.Text += "pan"; 
    } 

    private void mHome_MapZoom(object sender, MapZoomEventArgs e) 
    { 
     tbTemp.Text += "zoom"; 
    } 

Nó không đẹp, tốt nhất là tôi có thể quản lý.

+0

Cảm ơn! điều này thực sự trông giống như một giải pháp tốt. Tôi sẽ thử nó. –

+0

Tôi nghĩ tốt hơn nên thêm ghim vào Sự kiện OnHold – Mahantesh

3

Trừ khi tôi đang đọc câu hỏi của bạn sai, điều này có vẻ là chính xác những gì bạn đang tìm kiếm:

Silverlight - Add Pushpin to Bing Maps via C#

+0

Điều khiển Bản đồ Bing được sử dụng trong WP7 hơi khác với điều khiển Silverlight.Ví dụ, điều khiển WP7 không có sự kiện MouseClick và Pushpin không có sự kiện MouseEnter và MouseLeave. –

Các vấn đề liên quan