5

現在表示されている場所の MapIcon を表示する MapControl を使用しようとしています。

私の XAML には、次のものがあります。

<Maps:MapControl x:Name="MapControl" ZoomLevel="14" Center="{Binding Geopoint, Mode=OneWay}" Margin="-12,0,-12,0" Tapped="directions_Click" Height="200" MapServiceToken="{StaticResource BingMapsKey}" PanInteractionMode="Disabled" RotateInteractionMode="Disabled">
    <Maps:MapIcon Location="{Binding Geopoint}" Title="{Binding AttractionName}" />
</Maps:MapControl>

私がバインドしているアイテムは、ページの他の場所で使用されています (たとえば、マップの中心が正しい場所にあります) が、MapIcon が表示されず、その理由についてのヒントもありません。

MSDN からわかる限り、この方法でバインドできるはずです (特に<MapIcon>s の例ではそれらを動的に追加していますが、他の XAML オブジェクトが XAML で直接バインドされていることを示しています)。ここで XAML を間違ってマークアップしていますか?

4

3 に答える 3

2

あなたが述べたように、LocationandはandTitleにバインドできます。ただし、MapControl に MapIcon を表示するには、MapIcon をその MapElements コレクションにプログラムで追加する必要があります。GeopointAttractionName

例えば:

Loaded場合MapControl

private void MapControl_Loaded(object sender, RoutedEventArgs e)
{
    MapControl.MapElements.Add(MyMapIcon);
}

ここに画像の説明を入力

この後、画像MapIconのように表示できMapControlます。しかし、 の左上隅にクラス名の文字列があることがわかりますMapControl

MapIconこれは、MapControl の暗黙的な子としてを追加するためです。次の XAML コードのように追加MapIconすることと同等です。MapItemsControl

<Maps:MapControl x:Name="MapControl" ZoomLevel="14" Center="{Binding Geopoint, Mode=OneWay}" Margin="-12,0,-12,0"  Height="200" PanInteractionMode="Disabled" RotateInteractionMode="Disabled"   Loaded="MapControl_Loaded">
    <Maps:MapItemsControl>
        <Maps:MapIcon x:Name="MyMapIcon" Location="{Binding Geopoint}" Title="{Binding AttractionName}" />
    </Maps:MapItemsControl>
</Maps:MapControl>

MapItemsControl は、Button、HyperlinkBut​​ton、TextBlock などの XAML ユーザー インターフェイス要素を MapControl の子として追加することで表示できます。MapIcon は MapControl に表示できないため、そのクラス名を表示します。

回避策として、問題を解決するために を入れることができMapIconますResources。例えば:

<Page.Resources>
    <Maps:MapIcon x:Name="MyMapIcon" Location="{Binding Geopoint}" Title="{Binding AttractionName}" />
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Maps:MapControl x:Name="MapControl" ZoomLevel="14" Center="{Binding Geopoint, Mode=OneWay}" Margin="-12,0,-12,0" Tapped="directions_Click" Height="200" MapServiceToken="{StaticResource BingMapsKey}" PanInteractionMode="Disabled" RotateInteractionMode="Disabled" Loaded="MapControl_Loaded">
    </Maps:MapControl>
</Grid>
于 2016-02-04T01:08:56.497 に答える
2

XAML を使用して、独自の画鋲を作成することになりました。

 <Maps:MapControl x:Name="MapControl" ZoomLevel="14" Center="{Binding Geopoint, Mode=OneWay}" Margin="-12,0,-12,0" Tapped="directions_Click" Height="200" MapServiceToken="{StaticResource BingMapsKey}" PanInteractionMode="Disabled" RotateInteractionMode="Disabled">
     <Grid HorizontalAlignment="Left" Maps:MapControl.Location="{Binding Geopoint}" Maps:MapControl.NormalizedAnchorPoint="0,1">
         <Grid.RowDefinitions>
             <RowDefinition Height="*" />
             <RowDefinition Height="*" />
         </Grid.RowDefinitions>

         <Border Background="{ThemeResource SystemControlBackgroundAccentBrush}" Grid.Row="0">
             <TextBlock Text="{Binding AttractionName}" HorizontalAlignment="Left" />
         </Border>
         <Polygon Points="0,0 12.5,0 0,20" Fill="{ThemeResource SystemControlBackgroundAccentBrush}" StrokeThickness="0" Grid.Row="1" />
     </Grid>
 </Maps:MapControl>

これにより、( を介してMaps:MapControl.Location="{Binding Geopoint}") 位置をバインドし、相対位置を設定して、ポイントが正しい位置に留まるようにすることができます (Maps:MapControl.NormalizedAnchorPoint="0,1"つまり、ピン コンテンツの左下を介して)。

これは MapIcon を使用していませんが、これにより、アプリが Windows Phone 7.x/8.x で位置を表示する方法のルック アンド フィールが得られるため、同様のことを望む他のユーザーにとって役立つ可能性があります。

于 2016-02-02T13:41:12.827 に答える