這是我第一次聽說過這個問題。值得注意的是,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;
}
哦,好像我吸引了必應地圖的大傢伙!也許你是少數能找到解決方法的人的一部分。你有辦法看這個奇怪的行爲嗎?只需創建一個新的Phone 8.1項目(不是Silverlight)並向主頁面添加摺疊的地圖應該會引發異常。 – MakanWG
我想出了一個解決方法,並用它更新了我的答案。 – rbrundritt
這將適用於您希望從其容器隱藏地圖本身的特定情況。但讓我們假設該地圖是UserControl的一部分,該UserControl也是另一個UserControl的一部分。通過綁定(和轉換器)摺疊其中一個是不可能的,因爲它會觸發異常。順便說一句,通過代碼直接摺疊地圖將始終工作。通過xaml摺疊它或摺疊它的任何祖先容器將始終引發異常。 – MakanWG