2010-11-22 5 views
2

Je transfère une application iPhone vers WP7 qui contient une carte avec plusieurs marqueurs/punaises que je reçois d'un service web (emplacement, icône et titre).WP7 Info-bulle/bulle

J'ai installé le XAML nécessaire pour afficher la carte ainsi que du code pour le pushpin:

<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> 

Je cherche un moyen d'ajouter une sorte de bulle lorsque l'utilisateur clique sur la punaise. J'ai regardé un peu dans infoboxes/tooltips mais puisqu'ils fonctionnent sur le vol stationnaire, ce n'est pas quelque chose que je peux utiliser pour le téléphone (tap/clic).

Je suppose qu'il n'y a pas de contrôle similaire dans WP7 qui crée une bulle - comment pourrais-je créer quelque chose de similaire?

Merci à l'avance,

Alex

Répondre

4

Vous pouvez simplement mettre une bordure carrée dans LayoutRoot avec Visibility = "Réduit", puis lorsque vous cliquez sur votre punaise, vous mettez à jour son contenu et le rendre visible. Assurez-vous de mettre après votre contrôle de la carte (sinon il sera rendu derrière la carte et sera par conséquent invisible).

+0

Merci pour votre réponse, j'ai suivi une approche similaire. J'ai placé une bordure en bas de l'écran (avec quelques effets de fantaisie dans Blend) qui apparaît lorsqu'un utilisateur clique sur une broche avec l'information de ladite broche. – Xander

+0

Je cherchais aussi ça. Dommage qu'il n'y ait pas de manière intégrée de l'ajouter à côté de la bulle. Je suis surpris qu'ils ne gardent pas l'info-bulle et la basent sur un onglet à la place de la souris entrer/quitter. – CACuzcatlan

1

Vous pouvez créer un popup personnalisé.

Une excellente vidéo qui explique comment faire est situé here.

0

Une autre solution utilise le ContextMenu de la boîte à outils Silverlight pour Windows Phone! Il suffit d'aller à la page Coding4Fun sur CodePlex et le télécharger (il contient la boîte à outils) et dans votre XAML dans la définition de Punaise ajoutez ce qui suit:

<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> 

De cette façon, lorsque vous appuyez sur et maintenez le bouton punaise, vous aurez obtenir le menu de contect! (bon exemple aussi trouvé ici: example)

2

La meilleure façon d'y parvenir est pour afficher/masquer le contenu du Punaise sur Tap au lieu de MouseLeftButtonUp en raison de certaines considérations de performance.

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; 
}