2011-06-16 37 views
1

我想在Bing地圖上爲「汽車」點製作動畫。隨着物品的移動,我可以輕鬆繪製多個點,但我希望每輛車都能有一個點移動。必應地圖Silverlight綁定移動目標

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是類型所在地的車對象的屬性。 然而,這並不奏效,我不太清楚如何讓「汽車」在地圖上移動。有人能指引我朝着正確的方向嗎?

回答

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改變點會適當地移動,可以提醒約束力。