Bing карта Silverlight привязки для движущейся цели - PullRequest
1 голос
/ 17 июня 2011

Я хочу анимировать "автомобильную" точку на карте Bing.Я могу легко нарисовать несколько точек, когда предмет перемещается, но я хочу, чтобы одна точка двигалась по машине.

XAML

    <m:Map Name="myMap" Grid.Row="2" MouseClick="myMap_MouseClick" UseInertia="True">
    <m:MapLayer x:Name="carLayer" />
    </m:Map>

Некоторый код:

private void AddCarDot(double latitude, double longitude)
{
    Ellipse point = new Ellipse();
    point.Width = 15;
    point.Height = 15;
    point.Fill = new SolidColorBrush(Colors.Blue);
    point.Opacity = 0.65;
    Location location = new Location(latitude, longitude);
    MapLayer.SetPosition(point, location);
    MapLayer.SetPositionOrigin(point, PositionOrigin.Center);

    carLayer.Children.Add(point);
}

private void cmbCar_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if(cmbCar.SelectedItem != null)
            {
                Binding binding = new Binding("CarLocation");
                binding.Source = cmbCar.SelectedItem;
                binding.Mode = BindingMode.OneWay;
                carLayer.SetBinding(MapLayer.PositionProperty, binding);
            }
        }

CarLocation - это свойство объекта Car типа Location.Однако это не работает, и я не совсем уверен, как заставить «машину» перемещаться по карте.Может ли кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 17 июня 2011

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

Что должно произойти, так это то, что вы используете свойство зависимостей MapLayer.Position в качестве присоединенного свойства. Когда UIElement, к которому он прикреплен, является дочерним по отношению к MapLayer слою карты, знает, как его расположить.

Таким образом, вопрос заключается в том, как назначить привязку этому свойству, чтобы при изменении значения связанного объекта позиция обновлялась. Я собираюсь сделать предположение, что Elipse, созданный в предыдущей части кода, доступен как поле, которое я назову car. Тогда код может выглядеть примерно так: -

private Elipse AddCarDot(object source)
{
    Ellipse point = new Ellipse();
    point.Width = 15;
    point.Height = 15;
    point.Fill = new SolidColorBrush(Colors.Blue);
    point.Opacity = 0.65;
    MapLayer.SetPositionOrigin(point, PositionOrigin.Center);
    point.SetBinding(MapLayer.PositionProperty, new Binding("CarLocation") {Source = source});
    carLayer.Children.Add(point);
}

private void cmbCar_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if(cmbCar.SelectedItem != null)
    {
        AddCarDot(cmbCar);
    }
}

Теперь предположим, что у вас есть объект, имеющий свойство CarLocation, реализующее INotifyPropertyChanged, поэтому привязка может быть предупреждена, когда CarLocation изменит точку, которая будет перемещаться соответствующим образом.

...