WPF: Startup, StartupUri, Application_Startup, MainWindow, ShutdownMode

Esta dica de WPF, daria quase um artigo completo, pois ela ficou muito extensa. Contudo, o conteúdo abordado é formado por tópicos relacionados aos processos de inicialização e finalização de uma aplicação WPF que precisam ser compreendidos pelos desenvolvedores. Nas aplicações WindowsForms, tínhamos o método Main() da classe Program onde inseríamos nosso código para inicialização da nossa aplicação. As aplicações WPF possuem o arquivo App.xaml, que contém a propriedade StartupUri que pode ser utilizada para indicarmos o objeto que será carregado quando a aplicação for executada. Esta propriedade é definida automaticamente quando você cria um novo projeto WPF Application, nela o nome do objeto Window1.xaml é colocado (veja a Figura 1).



Podemos atribuir o nome de qualquer objeto da aplicação à propriedade StartupUri. Você pode defini-la através da linguagem declarativa XAML como mostrado na Figura 1, ou programaticamente, como mostra a Figura 2 logo abaixo.



A propriedade StartupUri atende é prática em alguns cenários, mas quando consideramos o desenvolvimento de uma aplicação comercial, os processos de inicialização, em geral, implementam outras instruções, instanciam objetos, verificam configurações entre outras ações. Neste caso, o evento Startup é a solução mais adequada, através deste evento podemos implementar nosso código de inicialização. Para utilizar este evento, no arquivo App.xaml, o desenvolvedor deve remover a propriedade StartupUri e substituí-la pelo evento Startup, o próprio IntelliSense auxilia o desenvolvedor criando a estrutura do novo procedimento de evento. Veja a Figura 3.




O nome padrão “Application_Startup” dado a este procedimento de evento pode ser alterado de acordo com o gosto do desenvolvedor. Você pode criar um procedimento com um nome qualquer, por exemplo, MinhaAplicacao_Startup e atribuir este nome ao evento Startup no arquivo App.xaml. Abaixo a Figura 4 mostra o código deste procedimento de evento.



Observe a Linha 18 em destaque na Figura 4. A propriedade MainWindow foi carregada com a instância do objeto Window1. Esta propriedade trabalha em conjunto com outra propriedade das aplicações WPF, a propriedade ShutdownMode. Juntas, essas duas propriedades definem o modo de finalização da sua aplicação WPF. A propriedade MainWindow, como padrão, sempre é carregada com o primeiro objeto Window instanciado pela aplicação, mas o desenvolvedor pode atribuir uma nova janela para esta propriedade a qualquer momento, usando o mesmo código apresentado na Linha 18 da Figura 4 


A definição do modo de finalização (ShutdownMode) é importante pois as aplicações WPF, diferentemente das aplicações WindowsForms, não possuem formulários do tipo MDI (Multiple Document Interface), e o desenvolvedor precisa tratar o processo de encerramento da sua aplicação, o que pode ser feito explicitamente, definindo o ShutdownMode como OnExplicitShutdown, neste caso seria necessário implementar um procedimento para finalizar a aplicação, ou ainda, o desenvolvedor poderia optar pelos dois outros modos disponíveis: OnLastWindowClose que faria com que a aplicação fosse finalizada no momento em que o usuário fechasse todas as janelas abertas, e o modo OnMainWindowClose, mais adequado para implementação do modelo MDI, neste caso, quando a janela definida como MainWindow for fechada, a aplicação será finalizada. Veja a Figura 5 que mostra a enumeração da propriedade ShutdownMode.



 O fato das aplicações WPF não possuírem um formulário do tipo MDI, não significa que as novas aplicações não utilizarão este modelo, passaremos a utilizar novos conceitos de aplicações MDI, como por exemplo, a interface dos aplicativos do Microsoft Office ou mesmo o Visual Studio que organizam diversos documentos utilizando guias ou controles do tipo container. A Figura 6 apresenta a interface de uma aplicação comercial, criada com WPF, e que utiliza o conceito de MDI implementado com o auxilio de um controle TabControl e OutlookBar.


2 thoughts on “WPF: Startup, StartupUri, Application_Startup, MainWindow, ShutdownMode”

  1. Cara, muito bacana mesmo. Eu já tava achando meio loucura esse WPF, escrevendo meu próprio método ‘static void Main’ (perdendo portanto as características da API) pq não achava a maneira de deixar a interface só como interface. Valeu!

  2. É importante salientar que esta nova forma de organização de janelas proposta para aplicações WPF já é utilizado por aplicações escritas em Delphi e em outras ferramentas de desenvolvimento Win32. Esta abordagem tem a denominação de TDI, que significa Tabbed Documment Interface (Fonte: http://en.wikipedia.org/wiki/Tab_(GUI))

    Sds.,

    Rubem Rocha
    MCPD ASP.NET
    Manaus, AM

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>