Carlos Blog
Carlos Blog
Chronos: Ventanas modales y MessageWindowElement
Publicado por en 9 febrero 2010
He hecho algunos cambios (que subí ayer a Codeplex) en Chronos para que las ventanas modales se comporten realmente como tal y para la visualización de cuadros de dialogo de confirmación personalizados (el típico MessageBox).
Hasta ahora las ventanas modales en Chronos impedían hacer algo (usar el ratón por ejemplo ) fuera de la ventana modal, pero no paraban la ejecución a la espera de la respuesta de la finalización de la ventana modal.
Ahora el método WindowElement.ShowDialog devuelve un valor del tipo DialogResult:
y para la ejecución del hilo de la UI mediante el inicio de un bucle de mensajes utilizando DispatcherFrame:
/// <summary> /// Shows the window as a modal dialog /// </summary> public DialogResult ShowDialog() { this.Parent = WindowElement.ModalContainerPanel; this.IsModal = true; this.Show(); try { // Set DialogResult default value this.DialogResult = Services.DialogResult.None; // Create a DispatcherFrame instance and use it to start a message loop this.dispatcherFrame = new DispatcherFrame(); Dispatcher.PushFrame(this.dispatcherFrame); } finally { } return this.DialogResult; }
Además he implementado un nuevo elemento de escritorio MessageWindowElement (que hereda de WindowElement) que permite visualizar un típico MessageBox pero con un estilo personalizado:
La visualización del cuadro de dialogo se realiza mediante la implementación de un ViewService de nRoute:
Por ejemplo, la visualización del mensaje de confirmación de borrado de un acceso directo está implementada así:
IShowMessageViewService showMessageService = ViewServiceLocator.GetViewService<IShowMessageViewService>(); showMessageService.ButtonSetup = DialogButton.YesNo; showMessageService.Caption = "Aviso"; showMessageService.Text = "¿Está seguro de que desea eliminar el acceso directo?"; if (showMessageService.ShowMessage() == DialogResult.Yes) { ServiceLocator.GetService<IElementManager>().CloseElement(this.Id); }
Ahí va un pantallazo de como se ve el cuadro de dialogo: