Bing Map缩小拉伸

时间:2017-02-17 15:02:09

标签: c# .net wpf xaml bing-maps

我正在使用Bing Map在WPF应用程序中工作。困扰我的一件事是,如果你最大化窗口并使用鼠标滚轮缩小,你可以缩放到足够远的地方,使得地图的高度小于容器所在的边界。我已经查看文档,看看是否有办法限制这一点。我知道我可以订阅放大/缩小事件更改并限制ZoomLevel。 (参见附图,显示我遇到的问题)。我想知道的是,如果XAML或地图上有属性或其他方法,无论缩放级别如何,无论窗口大小如何,始终确保地图可以填满容器。我已经尝试设置HorizontalAlignment="Stretch" VerticalAlignment="Stretch",但这仍然无法解决缩小问题。任何帮助,将不胜感激。

 xmlns:m="clr-namespace:Microsoft.Maps.MapControl.WPF;assembly=Microsoft.Maps.MapControl.WPF"
 <m:Map x:Name="MapControl"
                   HorizontalAlignment="Stretch"
                   VerticalAlignment="Stretch"
                   Center="{Binding CenterLocation,
                                    Mode=TwoWay,
                                    UpdateSourceTrigger=Explicit}"
                   CredentialsProvider="MAP_KEY"
                   ZoomLevel="{Binding ZoomLevel}">
                <m:Map.Children>
                    <TextBlock FontSize="20"
                               Foreground="Blue"
                               Text="{Binding ReportText}" />
                    <m:MapItemsControl ItemTemplate="{StaticResource PinTemplate}" ItemsSource="{Binding WeatherItemSource}" />
                </m:Map.Children>
            </m:Map>

这是灰色边缘的图像:

enter image description here

1 个答案:

答案 0 :(得分:1)

没有限制此属性的属性,但您可以轻松计算填充地图容器所需的缩放级别。在缩放级别1,世界地图的高度(不要与地图容器混淆)是512像素。每个缩放级别加倍。缩放级别2的高度为1024像素,依此类推。缩放级别3的高度为2048像素,依此类推。

4K屏幕的垂直分辨率约为2000像素。考虑到这一点,您可能只需要在加载地图并调整其大小时进行简单检查,以确定将地图限制为的缩放级别。

if(mapHeight < 512){
    minZoom = 1;
} else if(mapHeight < 1024){
    minZoom = 2;
} else if(mapHeight < 2048){
    minZoom = 3;
} else{
    minZoom = 4;
}

如果您想要一个更优雅的解决方案来计算任何可能的屏幕尺寸的缩放级别,您可以这样做:

minZoom = Math.Max(Math.Floor(Math.Log(mapHeight / 256, 2)) + 1, 1);