在Bing Maps WPF上进行居中和缩放

4

我创建了一个Bing Maps WPF对话框,并希望通过编程方式设置中心和缩放级别。我尝试使用SetValue(),但我没有找到正确的属性来传递它。

这是我的Bing Maps对话框的XAML:

<Window 
        x:Class="RAPMkI.BingMapsDialog"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:m="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF"
        Title="BingMapsDialog" Height="378" Width="467">
    <Grid>
        <m:Map CredentialsProvider="Haha, nice try."/>
        <Button Content="Locate" Margin="0,0,0,0" Name="button1" HorizontalAlignment="Right" Width="Auto" Height="Auto" VerticalAlignment="Top" />
    </Grid>
</Window>

代码后台看起来像这样:

namespace RAPMkI
{
    /// <summary>
    /// Interaction logic for BingMapsDialog.xaml
    /// </summary>
    public partial class BingMapsDialog : Window
    {
        public BingMapsDialog(Location center, int zoom)
        {
            InitializeComponent();
        }
    }
}

在初始化时,是否有一种方式可以使用传递给它的Location和缩放设置对话框的中心和缩放级别?

4个回答

8
我知道这是一个旧问题,但被接受的答案不再正确,如果曾经正确的话,所以我希望这会帮助到其他人。
`Center` 是一个属性而不是一个方法,因此尝试设置它是行不通的。我也曾头疼了好一段时间,并且一直停留在非洲西海岸(纬度:0,经度:0)。
你要找的是 `SetView(Location location, Double Zoom)`。
这是该函数的参考文档:
https://msdn.microsoft.com/en-us/library/hh709343.aspx 重写上面的示例代码如下:
public BingMapsDialog(Location center, double zoom)
{
    InitializeComponent();
    theMap.SetView(center, zoom);
}

应该就是需要的全部内容了。

我不知道你所说的“Center是属性而不是方法,因此尝试设置它不起作用”是什么意思。因为设置依赖属性(它们就是)绝对可以触发一些UI更改。实际上,在这里下面的@BraveHeart是正确的。如果将绑定模式设置为TwoWay,则控件中存在某些错误,只有在这种情况下才能正确更新地图控件。 - Y C

4

首先,您需要为地图命名,以便可以在程序中访问它。例如:

<m:Map Name="theMap" CredentialsProvider="Haha, nice try."/>

然后设置 CenterZoomLevel 属性,以更改它们的位置。例如:

public BingMapsDialog(Location center, int zoom)
{
    InitializeComponent();
    theMap.Center = center;
    theMap.ZoomLevel = zoom;
}

如果那不起作用,您可能需要在 Loaded 事件处理程序中设置 CenterZoomLevel


我试图窃取你的CredentialsProvider,但“哈哈,好尝试”甚至都没起作用!究竟怎么回事,Ritchie先生? - bturner1273
我正在重复使用OP的凭证提供程序名称。有几个凭证提供程序,你必须在尝试使用它之前知道哪一个。 - Peter Ritchie

1

地图有两个可绑定属性:ZoomLevel和Center。

你可以将视图绑定到一个具有代表ZoomLevel和Center的两个属性的视图模型上。

ZoomLevel是双精度浮点数,因此可以添加一个滑块,其值也绑定到视图模型中表示缩放级别的内容。这样就可以使用滑块来改变缩放级别。

*注意需要将绑定模式设置为"TwoWays"


0

您可以在XAML文件中定义初始位置,例如:

<m:Map x:Name="mMap" 
               CredentialsProvider= "xxxxxxxxxx" 
               Center="40.13618,-0.45822" 
               ZoomLevel="15">
</m:Map>

然后在程序中,您可以像这样设置中心点和缩放级别:

mMap.SetView(mylocation, myzoomlevel) 'mylocation -> Location, myzoomlevel -> Double

或者分开:

mMap.Center = mylocation
mMap.ZoomLevel = myzoomlevel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接