Управление картой Phone 7 Bing - добавление метки при нажатии - PullRequest
5 голосов
/ 07 октября 2010

Я использую новейшие инструменты Phone 7 RTM (скачал его сегодня, 7 октября 2010 г.).

Я пытаюсь сделать простую вещь здесь:

когда пользователь нажимает один раз на элементе управления картой, я хочу поставить туда метку. Кроме того, я хочу сохранить обычное встроенное поведение элемента управления картой ( дважды нажмите для увеличения).

(Если невозможно сохранить оба поведения, возможно, нажмите и удерживайте нажатой на карте, чтобы вставить метку).

При попытке выяснить это, я наткнулся на эту документацию изменений, внесенных в контрольную карту для Phone7: http://msdn.microsoft.com/en-us/library/ff955762.aspx

Затем я увидел новый класс MapInputEventArgs , в котором есть член ViewportPoint.

При просмотре примеров кода на обычном элементе управления картой SilverLight я увидел что-то вроде этого:

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));
    }

Но в случае Phone7 я не могу найти соответствующий обработчик событий и не могу найти, кто использует MapInputEventArgs в элементе управления картой. Поиск в Google дает мне только 1 результат !!

Итак, где находится подходящее событие для «Однократного нажатия» и как я могу получить ViewportPoint после его запуска?

Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 30 января 2011

Только что понял, если у вас все еще есть проблемы.

События MouseLeftButtonUp и MouseLeftButtonDown имеют метод GetPosition, который возвращает точку, которую вы ищете

 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);
    }
3 голосов
/ 23 ноября 2010

Если я не читаю ваш вопрос неправильно, похоже, это именно то, что вы ищете:

Silverlight - добавьте Pushpin в Bing Maps через C #

1 голос
/ 07 ноября 2010

Ладно, это не красиво, но у меня та же проблема, и я придумал обходной путь, который срабатывает, когда вы отпускаете пальцы с экрана.Я создаю экземпляр логического значения:

         bool noPin = false;

. Затем я использую его, чтобы определить, выполняется ли масштабирование или панорамирование пользователем (они запускаются между событиями MouseLeftButtonDown и MouseLeftButtonUp).На событии Up я проверяю, масштабировал ли пользователь масштабирование или панорамирование, и, если нет, помещаю мою метку.

    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";
    }

Это не красиво, но, ну, это было лучшее, что я мог сделать.

...