我有一个ScrollViewer,其中包含一个包含Bing地图的ControlTemplate,请参阅下面的代码段。图钉已正确定位,因此纬度和经度属性具有正确的值,但地图始终位于非洲下方,我认为它是0,0位置...
<bing:Map
x:Name="Karta"
Grid.Row="5"
Grid.ColumnSpan="2"
HorizontalAlignment="Center"
Width="500"
Height="500"
ZoomLevel="5"
Credentials="--removed--">
<bing:Map.Center>
<bing:Location Latitude="{Binding Latitud}" Longitude="{Binding Longitud}" />
</bing:Map.Center>
<bing:Map.Children>
<bing:Pushpin x:Name="LokalPin" >
<bing:MapLayer.Position>
<bing:Location Latitude="{Binding Latitud}" Longitude="{Binding Longitud}" />
</bing:MapLayer.Position>
</bing:Pushpin>
</bing:Map.Children>
</bing:Map>
以前我使用代码执行此操作(请参阅下文),但我想将其绑定。而且我认为我之后并没有使用<bing:Map Center>
,但如果我从上面删除它就没有区别了。
MapLayer.SetPosition(LokalPin, loc);
Karta.SetView(loc, 12.0);
答案 0 :(得分:1)
几个月太晚了,但也许其他人可以使用这个......我假设我们希望地图基于后备字段更新(不是在xaml中进行数据绑定,而是解决方法),并尝试使用支持字段的值使地图居中......
我做了什么,因为地图的数据绑定不起作用(很高兴在这里得到纠正)...... 我在包含地图的页面的代码隐藏文件中的intializecomponent()之后设置了viewmodel.propertychanged事件。
当viewmodel更新您想要用作地图中心的坐标属性时,会引发更改的事件,并通过从viewmodel读取新坐标来居中地图,例如:
void CurrentViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
try
{
if (e.PropertyName != "latitude") return;
//Karta is the name of the map
//assuming the properties are in double format, if not then just cast a double
//do something like this:
var latitude = ViewModel.latitude;
var longitude =ViewModel.longitude;
Karta.Center = new Location(latitude,longitude);
}
Catch(Exception exception)
{Debug.WriteLine(exception.Message);}
}
这完全基于您的页面已引用或使用视图模型的假设,并且属性已更改附加到它们的某些通知属性...如果我关闭错误的切线...请随意跳过这个答案......哈哈!使用视图模型和后面代码中的viewmodel.propertychanged事件,可以轻松地对地图中心进行数据绑定。一旦你完成它就太容易了..
答案 1 :(得分:0)
要在C#中设置地图的视图,请使用
Karta.SetView(loc, zoomLevel);
其中loc是要设置中心的Location对象,zoomLevel是整数缩放级别。
你也可以在XAML中做到这一点,但似乎你错误地拼写了“Latitude”(Latitud)和“Longitude”(Longitud)
有关文档,请参阅here。