March 2010 - Posts
Detalhes que fazem diferença. No VS2010, o desenvolvedor pode observar que a apresentação de textos selecionados no Editor de Código foi sensivelmente melhorada. Nas versões anteriores, os textos selecionados são apresentados geralmente com background Azul (Navy) e foreground Branco. O VS2010 tem a capacidade de exibir diferentes camadas (layers) juntas, proporcionando uma qualidade visual muito superior. Confira na imagem abaixo.

Com um grande número de controles na sua ToolBox, encontrar o controle desejado nem sempre é uma tarefa prática. No Visual Studio 2010, você pode fazer uma busca nos controles da sua ToolBox. Como? É simples, clique na sua ToolBox, em qualquer controle ou ponto dela. Comece a digitar o nome do controle que você está procurando, por exemplo, para encontrar o controle XamMonthCalendar, digite ‘xammont’ e observe que o Visual Studio muda o controle selecionado da ToolBox de acordo com sua digitação. Veja a figura abaixo:

Todos sabem que é possível utilizar as macros do Visual Studio para aumentar ou diminuir o tamanho da fonte do Editor de Código. Esse recurso é muito útil, principalmente numa apresentação ou treinamento. No VS2010 você pode controlar o Zoom do Editor de Código (sem aumentar/diminuir o tamanho da fonte). Para aplicar o Zoom In/Out mantenha a tecla CTRL pressionada e movimente a roda do seu mouse. Outra forma, ainda mais prática, são os atalhos CTRL+SHIFT+(ponto) para Zoom In e CTRL+SHIFT+(vírgula) para Zoom Out. Experimente!

Este recurso é realmente muito útil quando precisamos copiar vários fragmentos de código de diferentes procedimentos para criar ou completar um novo procedimento. Se você copiar (CTRL+C) vários fragmentos de código no Editor de Texto do Visual Studio, você pode usar o atalho de teclado CTRL+SHIFT+V para acionar o recurso de Clipboard Ring e percorrer a coleção de fragmentos copiados.
Você também pode criar seus snippets, copiando os fragmentos de código e colando-os na ToolBox para poder reutilizá-los a qualquer momento. Você pode simplesmente colar (CTRL+V) o fragmento diretamente na ToolBox ou selecionar o fragmento desejado no Editor de Código e arrastá-lo para a ToolBox.
Uma vez na ToolBox, você pode renomear os itens copiados para um nome mais sugestivo, facilitando seu trabalho na hora de recuperar esses itens.

Os comandos Copiar e Recortar do Visual Studio são muito úteis quando estamos trabalhando no Editor de Código. Mesmo sem selecionar nenhum texto, se você invocar um desses comandos, o Visual Studio copiará o conteúdo a linha atual (linha onde está o cursor). Isso é prático e muito útil para o desenvolvedor. Contudo, você pode invocar os comandos Copiar/Recortar acidentalmente e isso poderia substituir o conteúdo da sua Área de Transferência (Clipboard). Para evitar esse problema, acesse o menu Tools -> Options e na seção Text Editor -> All Languages -> General, desmarque a opção Apply Cut or Copy commands to a blank lines when there is no selection (Figura 1).


A Microsoft liberou hoje, 20/03/2010, o download da máquina virtual contendo o VS2010 e o Team Foundation Server (TFS) 2010 RC1. Você pode baixar os arquivos neste link: http://www.microsoft.com/downloads/details.aspx?FamilyID=509c3ba1-4efc-42b5-b6d8-0232b2cbb26e&displaylang=en
Confira algumas fotos do evento!


No dia 20 de março, a comunidade técnica SORBR.net, com o apoio da Microsoft – Portais MSDN e Technet, realizará o evento Community Launch 2010 em Votorantim/SP. Contamos com a sua presença neste grande encontro onde vamos capacitar e engajar a comunidade técnica da nossa cidade e aproximar os profissionais dos novos produtos e tecnologias Microsoft.

Para os desenvolvedores habituados com as aplicações WindowsForms, o método PerformClick() é um velho conhecido, largamente usado na camada de apresentação para disparar um click num botão existente provocando a execução do código associado a este evento. Contudo, os controles do tipo Button das aplicações WPF não implementam o método PerformClick(), o que frustra o desenvolvedor num primeiro momento. A boa notícia é que este método pode ser facilmente implementado com apenas algumas linhas de código. Observe o código a seguir.
private void PerformClick(Button btnObject)
{
btnObject.RaiseEvent(
new System.Windows.RoutedEventArgs(
System.Windows.Controls.Button.ClickEvent, btnObject));
}
A linha de código abaixo demonstra como disparar o evento Click do botão chamado btnCancelar:
private void Whatever()
{
PerformClick(btnCancelar);
}
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.

Esta dica apresenta o objeto MediaElement. Este objeto do WPF permite a execução de arquivos de áudio e vídeo em diversos formatos. Sua construção é bastante simples. Depois de inserir o MediaElement na interface da sua aplicação, é preciso definir a propriedade Source com o nome do arquivo que deseja executar. Esta propriedade pode ser definida através do XAML, como demonstrado na figura a seguir, ou se o desenvolvedor preferir, isto pode ser feito programaticamente. Certifique-se que o path e o nome do arquivo sejam informados corretamente. Importante: é necessário definir a propriedade LoadedBehavior como Manual para que o MediaElement permita a utilização dos métodos Play, Pause e Stop pela aplicação.

Depois de configurar o MediaElement usando o XAML, vamos acrescentar o código para os botões Play, Pause e Stop. Esse código é muito simples, o controle MediaElement expõe os métodos homônimos em sua interface, assim, basta invocar os métodos correspondentes como apresentado a seguir.

Confira a seguir, o nosso player em execução.

Outra novidade que acompanha os controles WPF é o novo ToolTip. Este recurso, até agora, só podia ser usado com texto sem formatação, exceto claro se você buscasse soluções de terceiros ou utilizasse APIs para esta finalidade, mas o ponto aqui é utilizar o ToolTip com seus recursos nativos. No WPF, como já vimos nas dicas anteriores, utilizando controles do tipo container, como o StackPanel, é possível inserir conteúdos diferentes num controle, e o ToolTip não é exceção, nesta dica utilizei um controle Image e dois controles TextBlock, assim temos uma imagem para ilustrar o ToolTip, um título em negrito e o texto explicativo, com o detalhe que esse texto pode utilizar a propriedade TextWrapping do controle TextBlock para ajustar o texto ao tamanho do StackPanel. A abaixo apresenta o código XAML, confira!

A seguir obser o ToolTip em tempo de execução.

Outra dica para modificar os botões de comando é como inserir uma imagem nos controles Button. Diferentemente das aplicações WindowsForms, os botões de comando do WPF não possuem uma propriedade Picture, mas assim como outros controles do WPF, o desenvolvedor pode inserir praticamente tudo dentro de um botão. Desta forma, podemos construir nosso botão com imagem e texto facilmente.
Observe atentamente que utilizei um StackPanel para agrupar os controles Image e Label. Isto é necessário porque a propriedade Content do botão, que é responsável por armazenar o conteúdo que será exibido, não suporta mais de um controle, porém, o StackPanel é visto como um único controle do tipo container e dentro dele você pode colocar todo conteúdo desejado. Você também pode alterar a propriedade Orientation do StackPanel para Horizontal colocando assim a imagem ao lado do texto e não sobre ele como mostra o exemplo. A figura a seguir apresenta o código XAML para esta dica.

Na seqüência observe o botão em execução.

Uma dica simples para modificar a aparência dos botões de comando (Button), é a aplicação de efeitos de sombra. Neste exemplo, demonstro duas formas diferentes de aplicar o mesmo efeito. A primeira forma utiliza o elemento Button.Effect (Framework 3.5) para aplicar a sombra laranja ao botão de comando. Esta é a forma recomendada para este tipo de efeito, pois sua renderização é mais eficiente quando comparamos com o elemento Button.BitmapEffect (Framework 2.0). Veja na figura abaixo o código XAML para aplicação deste efeito.

Na seqüência, observe os botões em tempo de execução.

Com a utilização de estilos e templates de controles dentro da seção Application.Resources, você pode alterar a aparência de um tipo de controle, por exemplo, alterar a aparência de todas as caixas de texto da sua aplicação, para que fiquem personalizadas. Como na dica número 3 onde acrescentamos o código para alterar a aparência das caixas de texto de uma janela, colocar o mesmo código na seção Application.Resources fará com que todas as caixas de texto da sua aplicação tenham a mesma aparência. A figura a seguir mostra o código XAML.

Isso mesmo, ao contrário das aplicações WindowsForms onde temos uma propriedade do controle TextBox que modifica seu comportamento para operar como campo para entrada de senhas, no WPF temos um novo controle, chamado PasswordBox, criado para este fim, e por isso mais seguro que seu predecessor. Outra diferença é a propriedade que armazena a senha digitada pelo usuário, ao contrário da propriedade Text habitual, o PasswordBox exibe a propriedade Password (claro!). A figura abaixo exibe o código XAML que adiciona este controle à janela da aplicação.

Veja como fica o código para exibir uma MessageBox com a senha digitada, a figura a seguir mostra a janela de código.

O resultado é apresentado na figura a seguir, com a janela em tempo de execução, exibindo a senha informada pelo usuário através do controle PasswordBox.

Agora veremos como atribuir um novo valor para a propriedade Source do controle Image, utilizando a mesma janela criada na dica anterior. A tarefa ainda é simples, vamos esclarecer alguns detalhes. Diferente do XAML, atribuir um valor para a propriedade Source do controle Image via código, não é simplesmente informar o caminho e o nome do arquivo, pois a propriedade Source é do tipo Image e não pode receber uma string informando o local da imagem, um erro de compilação seria gerado. Assim, precisamos criar um novo objeto BitmapImage para atribuí-lo como Source do controle Image. O objeto BitmapImage requer um parâmetro do tipo Uri que indicará o caminho e o nome do arquivo de imagem. Confira o código apresentado na figura abaixo.

Esta dica é simples. Inserir um controle Image numa janela do WPF e definir sua propriedade Source é realmente muito fácil. O XAML interpreta o conteúdo atribuído para a propriedade Source e exibe a imagem na janela sem problemas. Se o nome do arquivo ou o caminho estiver errado, o XAML Editor o alertará sublinhando em vermelho o valor informado. Veja abaixo que mostra o código XAML.

Os controles do tipo Lista também sofreram modificações no WPF. Esta dica demonstra como acrescentarmos alguns itens no controle ListBox e como determinar qual item foi selecionado através do evento SelectionChange e a partir do clique de um botão de comando. As duas formas podem ser utilizadas de acordo com a necessidade da sua aplicação, a construção é simples. Neste exemplo, utilizei a propriedade Tag para informar um suposto código do item, e a descrição foi atribuída a propriedade Content do ListBoxItem. Vamos ao código XAML apresentado na figura abaixo.
Após adicionar e configurar o ListBox à sua aplicação WPF, agora é necessário escrever o código que exibirá o item selecionado. São dois procedimentos, o primeiro exibe uma MessageBox informando o código e descrição do item selecionado quando o botão ItemSelecionado for clicado. O segundo procedimento é disparado através do evento SelectionChange, ou seja, sempre que o item selecionado for alterado, sua descrição será exibida na barra de título da janela. A próxima imagem demonstra o código dos dois procedimentos.

Agora veja o controle ListBox em tempo de execução na figura abaixo:

Ao contrário das aplicações WindowsForms, no WPF não temos o controle Timer, velho conhecido dos desenvolvedores. Uma alternativa para este controle é o objeto DispatcherTimer pertencente ao Namespace System.Windows.Threading. Este objeto pode ser configurado para operar exatamente da mesma maneira que o controle Timer que utilizávamos nas aplicações WindowsForms. São necessários alguns passos para implementar este timer, a figura abaixo mostra a declaração e a configuração do DispatcherTimer. É importante registrar que você deve parar o DispatcherTimer antes de fechar sua janela ou página. Isto é feito invocando o método Stop().

More Posts
Next page »