2011-01-03 51 views
7

Necesito un MessageBox.Show(), pero con una funcionalidad extendida: el messagebox incorporado para Windows Phone 7 no mostrará botones arbitrarios, simplemente OK o cancelar, necesito por ejemplo Sí No también. Necesito un método Show que solo se devolverá cuando el usuario haga clic en un botón. Intenté hacer mi propio mensaje como emergente. El problema es que es asíncrono como todo en el subproceso de UI en WP7, y no puedo bloquear el subproceso de UI porque el subproceso de UI también se encarga de manejar los eventos de clic de botón. Vi un ejemplo de ChildWindow para WP7, pero que también era asincrónico, debo tener un método Show() que solo se devuelve cuando el usuario hace clic. ¿Alguna sugerencia? Algún tipo de DoEvents() me podría ayudar mucho, pero no hay tal método en WP7 :(MessageBox.Show para Windows Phone 7

Respuesta

6

puede utilizar XNA de Guide.BeginShowMessageBox() para mostrar un cuadro de mensaje con botones personalizados. Here's un tutorial sobre cómo usarlo.

tenga en cuenta que el parámetro MessageBoxIcon no selecciona un icono en WP7, en su lugar selecciona el n sonido de oticación cuando se muestra el cuadro de mensaje.

EDIT: Vaya, no leí su requisito síncrono antes de publicar. Tal vez puede establecer un indicador para detener la ejecución de lo que desee evitar y restablecerlo una vez que el usuario haya hecho una selección.

+0

Sí, pero mi mayor problema es que debo usar un método que solo devuelve cuando se hace clic en un botón. Puedo usar un temporizador, por ejemplo, para esperar hasta haga clic en evento y continúe el programa en el controlador de eventos de tiempo de espera si la condición está satisfecha, pero no puedo encontrar la manera de implementar esto en un método :( – Vic

+0

¡Lo intenté y funciona! :): – Vic

+0

AutoResetEvent waitHandle = new AutoResetEvent (falso); Guide.BeginShowMessageBox ("Versión de Windows", "Elige una versión de Windows.", nueva lista {"Vista", "Seven"}, 0, MessageBoxIcon.Error, asyncResult => int ? returned = Guide.EndShowMessageBox (asyncResult); waitHandle.Set(); }, nulo); waitHandle.WaitOne(); ¡Esto no bloquea el hilo de UI! Gracias :) – Vic

2

Encontré esto cuando buscaba algo similar, pero terminé simplemente usando el messagebox incorporado. Sin duda le daría la capacidad de tener botones personalizados.

Windows Phone 7 Custom Message Box

+0

Gracias por su respuesta, pero la parte Show() no está satisfecha en esta solución, solo la parte de botones arbitrarios; si modifico esto: NotificationBox.Show ("Salir", "¿Está seguro?", nuevo NotificationBoxCommand ("Sí",() => {}), nuevo NotificationBoxCommand ("No",() => {})); a esto: AutoResetEvent waitHandle = new AutoResetEvent (false); NotificationBox.Show ("Salir", "¿Está seguro?", nuevo NotificationBoxCommand ("Sí",() => {waitHandle.Set();}), nuevo NotificationBoxCommand ("No",() => {waitHandle.Set();})); waitHandle.WaitOne(); ... luego me atasco, ese es mi problema :( – Vic

1

Use un lienzo que tenga todo lo que desee en él. A continuación, utilice la propiedad de visibilidad para que aparezca ...