Вызов карты функции масштабирования, связанной с событием MouseWheel в WPF - PullRequest
0 голосов
/ 25 мая 2020

У меня есть приложение WPF с картой Bing , и я застрял в одном моменте. Щелчок левой кнопкой мыши создает канцелярскую кнопку. И если вы захотите изменить прокрутку карты колесиком мыши, пока курсор находится на вставленной канцелярской кнопке, ничего не произойдет. Я понимаю, что у моих элементов на карте нет вызывающих событий. Но если с событием MouseUp , я переопределил свой метод (function: myMap_MouseMove , str: pin.MouseUp + = Pin_MouseUp ;)

Код (XAML):

    <m:Map x:Name="myMap" ZoomLevel="15" Mode="AerialWithLabels" MouseMove="myMap_MouseMove" MouseUp="myMap_MouseUp"  />

Код (C#):

    private void myMap_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        if (isDragging)
        {
            isDragging = false;
            return;
        }

        switch (e.ChangedButton)
        {
            case System.Windows.Input.MouseButton.Left:
                myMap_MouseLeftButtonDown(sender, e);
                break;

            case System.Windows.Input.MouseButton.Right:
                myMap_MouseRightButtonDown(sender, e);
                break;

            default:
                break;

        }

    }
private void myMap_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
    ...
    foreach (var viewportPoint in drawPolyPoints)
    {
        // Convert the mouse coordinates to a location on the map
        ControlTemplate template = (ControlTemplate)this.FindResource("CutomPushpinTemplate");
        Pushpin pin = new Pushpin();
        pin.Location = viewportPoint;
        //pin.Template = template;
        pin.Style = (Style)this.FindResource("LabelPushpinStyle");
        pin.MouseUp += Pin_MouseUp;  // It's OK
        pin.MouseWheel += myMap.MouseWheel;  // problem
        myMap.Children.Add(pin);
    }

    double area = CalculateArea(_polyLocations);
    this.Fields.Text = "Area: " + area;
}
    private void myMap_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {

        ...
        e.Handled = true;
        Point mousePosition = e.GetPosition(myMap);

        Location pinLocation = myMap.ViewportPointToLocation(mousePosition);
        ControlTemplate template = (ControlTemplate)this.FindResource("CutomPushpinTemplate");

        // The pushpin to add to the map.
        Pushpin pin = new Pushpin();
        pin.Location = pinLocation;
        pin.Style = (Style)this.FindResource("LabelPushpinStyle");

        // Adds the pushpin to the map
        myMap.Children.Add(pin);
        drawPolyPoints.Add(pin.Location);

        ...

    }

У меня проблемы с событием MouseWheel .

Как Я могу вызвать событие Map MouseWheel из дочернего элемента (PushPin или другого) ??

1 Ответ

1 голос
/ 26 мая 2020

Чтобы вызвать MouseWheelEvent на карте, вы можете объявить новый обработчик событий, который перенаправит событие на карту. Обработчик MouseWheelEvent:

private void RaiseMyMapMouseWheel(object sender, MouseWheelEventArgs e)
    {
        var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
        {
            RoutedEvent = UIElement.MouseWheelEvent,
            //You can change the sender for myMap if you wish
            Source = sender
        };
        myMap.RaiseEvent(eventArg);
    }

, а затем вы добавите обработчик следующим образом:

pin.MouseWheel += this.RaiseMyMapMouseWheel;
...