2011-02-06 10 views
12

Ho bisogno di aprire un menu e poiché WP7 è not designed per eseguire tali azioni, sto prendendo l'aiuto di Toolkit. Di seguito è riportato il codice di esempio:ContextMenu alla spina invece di toccare e tenere premuto

<Border BorderThickness="3" Padding="6"> 
    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu> 
      <toolkit:MenuItem Header="item1" Click="Item1_Click" /> 
      <toolkit:MenuItem Header="item2" Click="Item2_Click" /> 
      <toolkit:MenuItem Header="item3" Click="Item3_Click" /> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
    <TextBlock Text="Tap" /> 
</Border> 

Ora questo funziona correttamente finché l'utente esegue una pressione e mantiene l'azione. Ma non posso chiedere all'utente un'azione del genere. Ho bisogno di visualizzare il menu con un solo clic/tocca/tocca/gesti (come vuoi chiamarlo). Qualcuno può suggerire per favore? Se ritieni che il toolkit non sia il modo migliore, ti preghiamo di suggerire alternative con codice di esempio. Ho provato il popup ma ha fatto più male che bene alla mia applicazione

risposta

14

È possibile aggiungere GestureListener allo Border e iscriversi all'evento Tap. Nel gestore eventi, si ottiene ContextMenu per Border e si imposta IsOpen su true se non ha un genitore logico.

<Border BorderThickness="3" Padding="6"> 
    <toolkit:GestureService.GestureListener> 
     <toolkit:GestureListener Tap="GestureListener_Tap" /> 
    </toolkit:GestureService.GestureListener> 
    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu> 
      <toolkit:MenuItem Header="item1" Click="Item1_Click" /> 
      <toolkit:MenuItem Header="item2" Click="Item2_Click" /> 
      <toolkit:MenuItem Header="item3" Click="Item3_Click" /> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
    <TextBlock Text="Tap" /> 
</Border> 

private void GestureListener_Tap(object sender, GestureEventArgs e) 
{ 
    Border border = sender as Border; 
    ContextMenu contextMenu = ContextMenuService.GetContextMenu(border); 
    if (contextMenu.Parent == null) 
    { 
     contextMenu.IsOpen = true; 
    } 
} 
+0

Questo fa il lavoro. In una nota a margine. Qualche idea su come evidenziare l'opzione selezionata. Voglio solo evidenziare la riga selezionata con il colore di sfondo della riga impostato su grigio o qualcosa di simile. – Ravi

+1

@Ravi: Devi evidenziare il 'MenuItem' selezionato in base ad alcune condizioni prima di aprire il' ContextMenu'? Forse provate a dare un nome a 'MenuItem's e impostate' menuItem1.Background = new SolidColorBrush (Colors.Gray); 'basato sulla condizione –

+0

awesome ... thanks ... non l'ho provato sul menù ma usato altrove e funziona come un fascino. – Ravi

0

Se si desidera un menu di scelta rapida per l'applicazione, quindi il ContextMenu e ContextMenuService sono l'approccio migliore da adottare perché è standard in tutte le applicazioni di terze parti e preinstallate . Gli utenti comprendono già il gesto di "toccare e tenere premuto", quindi lavorare in modo intuitivo sarà contro-intuitivo.

Se (per qualsiasi motivo) è necessario avviare una ContextMenu da un singolo tocco, allora si può sempre personalizzare il codice sorgente per ContextMenu.cs dalla Silverlight Toolkit in modo che invece di agganciare l'evento Hold aggancia l'evento Tap.

+0

Ciao Derek, questo non ha aiutato molto. Considerando il fatto che sono abbastanza nuovo per WP7 e Silverlight, ho controllato il codice di sicurezza, ma non ho capito molto. Potete per favore aiutarmi a cambiare il rubinetto e tenere premuto l'azione per toccare semplicemente? – Ravi

+0

Scaricare il codice sorgente per Silverlight Toolkit, aprire il file sorgente a cui si fa riferimento, modificare '.Hold + =' in '.Tap + =', ricompilare, aggiornare il riferimento nel progetto al nuovo assembly. Dubito ancora che cambiare il comportamento predefinito sia la strada giusta da percorrere, comunque. –

+0

Ciao Derek, probabilmente hai ragione. Dovrei andare con il suggerimento di Meleak e usare il servizio di gesti. Grazie comunque – Ravi

Problemi correlati