2017-02-17 26 views
2

我正在使用必应地图的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

没有限制这种属性,但你可以很容易地计算其缩放级别需要填补地图容器。在缩放级别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); 
+0

它不应该是'Math.Log(mapHeight/256,2)'(即以2为底的对数)而不是'Math.Log(mapHeight/256)'?除此之外,并不是必须将缩放级别调整为整数值,因为“ZoomLevel”属性的类型为“double”。 – Clemens

+0

是。我的测试应用程序中也有这个功能,但在响应中输入时忘记了它。应该使用复制/粘贴。 – rbrundritt