Добавление MapControl в xaml приводит к "отказу от катастрофы",

Я создаю универсальное приложение, использующее Visual Studio Ultimate 2013 Version 12.0.30501.00 Обновление 2. Я получаю катастрофический сбой при добавлении управления картой в свой xaml, как это

<Maps:MapControl Visibility="Collapsed"/>. 

Я добавил

xmlns:Maps="using:Windows.UI.Xaml.Controls.Maps" 

в заголовке страницы и добавлена ​​возможность "местоположения" в файл манифеста приложения. Кто-нибудь сталкивался с той же проблемой? Вы можете проверить его, создав образец приложения и добавить только MapControl. Пожалуйста, помогите мне решить эту проблему.

Проблема наблюдается и в обычных приложениях Windows Phone 8.1. Я что-то пропустил?

Проблема наблюдается, когда я пытаюсь запустить приложение в эмуляторе.

Ошибка не показывает никакой другой информации только "катастрофический сбой", больше ничего.

Возможно, я попытаюсь переустановить Visual Studio. Но еще один интересный факт заключается в том, что я могу заставить его работать, если я не скрываю элемент управления карты на странице.

Можете ли вы протестировать его, создав образец приложения и просто сделав управление картой Видимость = "Свернуто"?

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

    <Grid>
        <Maps:MapControl Visibility="Collapsed" />
    </Grid>
</Page>

И проблема наблюдается на нескольких ПК.

Ответ 1

Я проверил ваш пример и действительно есть такая проблема и на моем телефоне.

Как я уже проверил, можно установить Collapsed из кода - так как обходной путь:

<Grid>
   <Maps:MapControl Name="myMap" Visibility="Visible" />
</Grid>

В коде позади:

public MainPage()
{
    this.InitializeComponent();
    this.Loaded += (sender, e) => myMap.Visibility = Visibility.Collapsed;
}

Ответ 2

Я придумал обходной путь для этого. Вместо использования видимости вы можете использовать свойства высоты и ширины карт, чтобы скрыть/показать карту. Установите для них значение 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;
}