2015-11-24 55 views
1

Adding MapControl in xaml results in a "Catastropic failure"相同的问题,在不引起灾难性异常的情况下,bing地图控件无法折叠。更糟的是,只需将一张地图放入一个折叠的容器中,它也会崩溃。这意味着每个父母,祖父母等都必须使用后面的代码折叠。无缘无故地打破mvvm模式只是为了显示和隐藏地图。WP 8.1 Bing Map灾难性故障

是否有人找到了解决方法? MS真的很疯狂,即使他们知道它没有像预期的那样行为,他们也没有修复自己的控制。 任何帮助表示赞赏!

回答

1

这是我第一次听说过这个问题。值得注意的是,WP8.1中的地图控制不是由微软创建的,而是由诺基亚创建的。在Windows 10中,微软采用了诺基亚控件,并结合了Windows 8地图控件的功能,使其更加稳定。

更新: 我看过这个问题。找出导致错误的原因并不容易,因为地图控件是用本机C++编写的,而且所抛出的错误具有无法访问的属性,显示为“?”。也就是说,我设法找出了解决方法。折叠控件与给出控件的宽度和高度为0没有多大区别。有鉴于此,下面是如何使用宽度/高度而不是可见性显示/隐藏地图的代码示例。

<Page 
    x:Class="WP81App.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:WP81App" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps" 
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 

    <Grid> 
     <Maps:MapControl Name="MyMap" Height="0" Width="0" /> 
     <Button Content="Show Map" Click="ShowMapBtn_Clicked" HorizontalAlignment="Center"/> 
    </Grid> 
</Page> 

按钮处理程序:

private void ShowMapBtn_Clicked(object sender, RoutedEventArgs e) 
{ 
    var mapContainer = MyMap.Parent as FrameworkElement; 
    MyMap.Width = mapContainer.ActualWidth; 
    MyMap.Height = mapContainer.ActualHeight; 

    //Hide the button 
    (sender as Button).Visibility = Visibility.Collapsed; 
} 
+0

哦,好像我吸引了必应地图的大家伙!也许你是少数能找到解决方法的人的一部分。你有办法看这个奇怪的行为吗?只需创建一个新的Phone 8.1项目(不是Silverlight)并向主页面添加折叠的地图应该会引发异常。 – MakanWG

+0

我想出了一个解决方法,并用它更新了我的答案。 – rbrundritt

+0

这将适用于您希望从其容器隐藏地图本身的特定情况。但让我们假设该地图是UserControl的一部分,该UserControl也是另一个UserControl的一部分。通过绑定(和转换器)折叠其中一个是不可能的,因为它会触发异常。顺便说一句,通过代码直接折叠地图将始终工作。通过xaml折叠它或折叠它的任何祖先容器将始终引发异常。 – MakanWG

相关问题