2011-01-03 24 views
7

Ho bisogno di un MessageBox.Show(), ma con una funzionalità estesa: la finestra di messaggio incorporata per Windows Phone 7 non mostrerà pulsanti arbitrari, solo OK o annulla, ho bisogno per esempio Sì, no. Ho bisogno di un metodo Show che ritorni solo quando l'utente fa clic su un pulsante. Ho provato a creare la mia messagebox come popup. Il problema è che è asincrono come tutto nel thread UI in WP7 e non riesco a bloccare il thread UI perché il thread UI è responsabile anche della gestione degli eventi click del pulsante. Ho visto un esempio ChildWindow per WP7, ma era anche asincrono, devo avere un metodo Show() che ritorna solo quando l'utente fa clic. Eventuali suggerimenti? Alcuni tipi di DoEvents() potrebbero aiutarmi molto, ma non c'è un metodo simile in WP7 :(MessageBox.Show per Windows Phone 7

risposta

6

è possibile utilizzare XNA di Guide.BeginShowMessageBox() per visualizzare un MessageBox con pulsanti personalizzati. Here's un tutorial su come usarlo.

Nota che il parametro MessageBoxIcon non seleziona un'icona su WP7, invece seleziona il n Otification sound quando viene visualizzata la finestra di messaggio.

MODIFICA: Oops, non ho letto il tuo requisito sincrono prima di pubblicare. Forse puoi impostare un flag per interrompere tutto ciò che vuoi impedire l'esecuzione e resettarlo una volta che l'utente ha effettuato una selezione.

+0

Sì, ma il mio problema più grande è che devo usare un metodo che ritorna solo quando un pulsante è stato cliccato.Posso usare ad esempio un timer per aspettare fino a quando il fare clic su evento e continuare il programma nel gestore eventi timeout se la condizione è soddisfatta, ma non riesco a capire come implementarlo in un metodo :( – Vic

+0

Ho provato e funziona !!! :): – Vic

+0

AutoResetEvent waitHandle = new AutoResetEvent (false); Guide.BeginShowMessageBox ("Versione di Windows", "Scegli una versione di Windows.", nuovo Elenco {"Vista", "Sette"}, 0, MessageBoxIcon.Error, asyncResult => { int ? returned = Guide.EndShowMessageBox (asyncResult); waitHandle.Set(); }, null); waitHandle.WaitOne(); questo non blocca il thread dell'interfaccia utente! Grazie :) – Vic

2

Ho trovato questo quando cercavo qualcosa di simile, ma mi sono ritrovato a usare solo la casella dei messaggi incorporata. la possibilità di avere pulsanti personalizzati.

Windows Phone 7 Custom Message Box

+0

Grazie per la risposta, ma la parte Show() non è soddisfatta in questa soluzione, solo la parte dei pulsanti arbitrari; se modifico questo: NotificationBox.Show ("Exit", "Are you sure?", new NotificationBoxCommand ("Yes",() => {}), new NotificationBoxCommand ("No",() => {})); a questo: AutoResetEvent waitHandle = new AutoResetEvent (false); NotificationBox.Show ("Exit", "Are you sure?", new NotificationBoxCommand ("Yes",() => {waitHandle.Set();}), new NotificationBoxCommand ("No",() => {waitHandle.Set();})); waitHandle.WaitOne(); ... poi vengo bloccato, questo è il mio problema :( – Vic

1

Utilizzare una tela con tutto ciò che si desidera. Quindi basta usare la proprietà visibility per farlo apparire ..