Chronos: Ventanas modales y MessageWindowElement


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:

image

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:

image

La visualización del cuadro de dialogo se realiza mediante la implementación de un ViewService de nRoute:

image

 

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:

image

About these ads

Deja un comentario

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s