1

Bingマップ上の「車」のドットをアニメーション化したいと思います。アイテムが移動するときに複数のドットを簡単に描くことができますが、車ごとに1つのドットを移動させたいと思います。

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は、タイプLocationのCarオブジェクトのプロパティです。ただし、それは機能せず、「車」をマップ内で移動させる方法がよくわかりません。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

0

不思議な「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、ドットが適切に移動します。

于 2011-06-16T21:47:10.227 に答える