Mensagens customizadas com MessageDialog na Plataforma Universal do Windows

Neste artigo veremos como exibir mensagens em formato modal em Aplicações Universais do Windows 10 utilizando a classe MessageDialog.

Uma necessidade comum na hora de exibir mensagens para o usuário é apresentar opções personalizadas, além dos botões padrão de Ok, Fechar e semelhantes. Vejamos um exemplo prático na Plataforma Universal do Windows (que vamos chamar somente de UWP).

Passo 1: Mensagens básicas

Exibimos mensagens na UWP através da classe MessageDialog. Em sua forma mais básica, a classe MessageDialog recebe em seu construtor apenas a string de conteúdo, como no código a seguir. Nesse caso, a caixa de diálogo não possuirá título e irá conter apenas um botão Close.


MessageDialog mensagem = new MessageDialog("Conteúdo da mensagem");
await mensagem.ShowAsync();

O resultado é mostrado na Figura 1.

Para adicionar o título na caixa de diálogo, basta informá-lo como segundo parâmetro no construtor da classe:


MessageDialog mensagem = new MessageDialog(
    "Conteúdo da mensagem", "Título da mensagem");

Agora o resultado será o da Figura 2.

Passo 2: Botões customizados

A Listagem 1 mostra como adicionar três opções novas, cada uma com um id distinto, e ler seu resultado em um bloco switch.

Listagem 1. Mensagem com opções customizadas.

MessageDialog mensagem = new MessageDialog("Escolha uma opção.");

mensagem.Commands.Add(new UICommand("Sim") { Id = "S" });
mensagem.Commands.Add(new UICommand("Não") { Id = "N" });
mensagem.Commands.Add(new UICommand("Talvez") { Id = "T" });

var resposta = await mensagem.ShowAsync();

switch (resposta.Id.ToString())
{
    case "S": //Usário clicou Sim
        break;
    case "N": //Usário clicou Não
        break;
    case "T": //Usário clicou Talvez
        break;
}

Quando exibida, essa mensagem terá a forma ilustrada na Figura 3.

Passo 3: Callbacks customizados

No exemplo anterior cada opção tinha um id, a partir do qual tomava-se uma decisão sobre qual ação realizar de acordo com a resposta do usuário. Para este tipo de cenário, também podemos atribuir essa ação customizada diretamente ao comando, podendo inclusive reaproveitá-lo posteriormente.

A classe UICommand possui uma propriedade chamada Invoked, do tipo UICommandInvokedHandler, um delegate para uma função que é executada quando o comando é acionado. Na Listagem 2 vemos como utilizá-la.

Note que agora não é mais necessário tratar a escolha do usuário por meio de um switch, pois cada comando (botão) contém internamente o método que será executado quando ele for acionado. Neste caso, além da preferência do programador, cabe avaliar a possibilidade de reaproveitamento de um comando em outras mensagens.

Listagem 2. Comandos com call-back customizado

MessageDialog mensagem = new MessageDialog("Escolha uma opção.");

UICommand comandoAceitar = new UICommand(
    "Aceitar",
    (cmd) =>
    {
        //Usuário clicou em Aceitar. Fazer algum procedimento adicional.   
    },
    0);
mensagem.Commands.Add(comandoAceitar);

UICommand comandoRejeitar = new UICommand(
    "Rejeitar",
    (cmd) =>
    {
        //Usuário clicou em Rejeitar. Fazer algum procedimento adicional.   
    },
    1);
mensagem.Commands.Add(comandoRejeitar);

await mensagem.ShowAsync();

A assinatura do delegate UICommandInvokedHandler é a seguinte:


public delegate void UICommandInvokedHandler(
  IUICommand command
)

Assim, qualquer método que atenda a essa assinatura pode ser atribuído à propriedade Invoked dos UICommands. Por exemplo, a Listagem 3 mostra um método desse tipo:

Listagem 3. Método para tratar o acionamento do comando

private void TratarBotaoAceitar(IUICommand comando)
{
    //usuário clicou em Aceitar
}

Agora, para utilizá-lo no lugar do método anônimo bastaria fazer como na Listagem 4.

Listagem 4. Utilizando o método criado no UICommand

UICommand comandoAceitar = new UICommand(
    "Aceitar",
    TratarBotaoAceitar,
    0);

Dessa forma, se for preciso, será possível utilizar um mesmo método para tratar as respostas do usuário em várias mensagens.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados