2010-11-22 8 views
2

Ich portiere eine iPhone App nach WP7, die eine Karte mit mehreren Markern/Pins enthält, die ich von einem Webservice (Ort, Icon und Titel) bekomme.WP7 Pushpin Tooltip/bubble

Ich habe Setup die XAML erforderlich, um die Karte sowie einen Code für die Reißzwecke anzuzeigen:

<phone:PhoneApplicationPage.Resources> 
    <ControlTemplate x:Key="customPushpin" TargetType="my:Pushpin"> 
     <Image Height="39" Source="Resources/Icons/Pushpins/pinGreen.png" Stretch="Fill" Width="32"/> 
    </ControlTemplate> 
</phone:PhoneApplicationPage.Resources> 

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <my:Map Height="Auto" HorizontalAlignment="Stretch" Margin="0" x:Name="Map" 
      VerticalAlignment="Stretch" Width="Auto" CredentialsProvider="{Binding CredentialsProvider}" 
      CopyrightVisibility="Collapsed" LogoVisibility="Collapsed" Center="{Binding Mode=TwoWay, Path=Center}" 
      ZoomBarVisibility="Visible" 
      ZoomLevel="{Binding Zoom, Mode=TwoWay}"> 
     <my:MapItemsControl ItemsSource="{Binding Pushpins}"> 
      <my:MapItemsControl.ItemTemplate> 
       <DataTemplate> 
        <my:Pushpin MouseLeftButtonUp="Pushpin_MouseLeftButtonUp" 
           Location="{Binding Location}" 
           Template="{StaticResource customPushpin}">       
        </my:Pushpin> 
       </DataTemplate> 
      </my:MapItemsControl.ItemTemplate> 
     </my:MapItemsControl> 
    </my:Map>   
</Grid> 

ich nach einem Weg suchen, eine Art Blase, wenn der Benutzer klickt auf die Reißzwecke hinzuzufügen. Ich habe ein wenig in Infoboxen/Tooltips geschaut, aber da sie auf Hover funktionieren, kann ich das nicht für das Telefon verwenden (tippen/klick).

Ich vermute, es gibt keine ähnliche Kontrolle in WP7, die eine Blase schafft - wie könnte ich etwas Ähnliches erstellen?

Vielen Dank im Voraus,

Alex

Antwort

4

Sie könnten einfach einen quadratischen Rahmen in LayoutRoot mit Visibility = "Collapsed" einfügen, dann, wenn Sie auf Ihren Pin klicken, aktualisieren Sie seinen Inhalt und machen ihn sichtbar.

Stellen Sie sicher, es nach Ihre Kartensteuerung (sonst wird es hinter der Karte gerendert werden und folglich unsichtbar sein).

+0

Danke für Ihre Antwort, ich folgte tatsächlich einem ähnlichen Ansatz. Ich habe einen Rand am unteren Rand des Bildschirms platziert (mit einigen ausgefallenen Effekten in Blend), der angezeigt wird, wenn ein Benutzer auf einen Pin mit den Informationen des Pins klickt. – Xander

+0

Ich habe das auch gesucht. Schade, es gibt keine eingebaute Möglichkeit, es neben der Blase hinzuzufügen. Ich bin überrascht, dass sie den Tooltip nicht beibehalten und ihn anstelle der Maus auf einen Tab setzen. – CACuzcatlan

1

Sie können eine benutzerdefinierte Popup erstellen.

Ein großartiges Video, das erläutert, wie dies zu tun ist, befindet sich here.

0

Andere Lösung verwendet das ContextMenu aus dem Silverlight-Toolkit für Windows Phone! gehen einfach auf die Coding4Fun Seite auf CodePlex und laden Sie es (es das Toolkit enthält) und in XAML in der PushPin Definition add folgende:

<map:Pushpin x:Name="currentLocation"> 
<toolkit:ContextMenuService.ContextMenu> 
    <toolkit:ContextMenu IsZoomEnabled="False"> 
     <toolkit:MenuItem Header="this is menu item 1" Click="MenuItem_Click" /> 
     <toolkit:MenuItem Header="this is menu item 2" Click="MenuItem_Click" /> 
     <toolkit:MenuItem Header="this is menu item 3" Click="MenuItem_Click" /> 
    </toolkit:ContextMenu> 
</toolkit:ContextMenuService.ContextMenu></map:Pushpin> 

Auf diese Weise, wenn Sie die Reißzwecke tippen und halten, werden Sie hol dir das contextmenu! (gutes Beispiel auch hier gefunden: example)

2

Der einfachste Weg, dies zu erreichen, ist den Inhalt des Pushpin on Tap anstelle von MouseLeftButtonUp anzeigen/verbergen wegen einiger Leistungsaspekte.

void pushPin_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    this.border.Visibility = System.Windows.Visibility.Visible; 

    //stop the event from going to the parent map control 
    e.Handled = true; 
} 

private void map_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
    this.border.Visibility = System.Windows.Visibility.Collapsed; 
}