Silverlight 4 - Novo xaml parser e suporte namespaces xml

O Silverlight 4 foi lançado na semana passada é já existe uma tonelada de posts com informações a respeito das novidades. Eu estava lendo um post do blog do Silverlight SDK e encontrei uma novidade interessante sobre a qual não se está falando muito. O parser de xaml do Silverlight 4 agora respeita corretamente as definições de namespace xml. Isso tem várias implicações:

  • Agora o namespace padrão dos seus arquivos xml não precisa mais ser “http://schemas.microsoft.com/winfx/2006/xaml/presentation”. Você pode mudar se for útil/necessário para sua aplicação (por exemplo, se você estiver gerando xaml dinamicamente utilizando apenas controles customizados).
  • Com esse suporte, agora é possível criar os seus próprios namespaces, agrupando vários namespaces da sua apliação ou mesmo de diversos assemblies distintos.
  • Frameworks como o Silverlight Toolkit e o SDK já estão tirando proveito disso, definindo seus próprios namespaces para simplificar sua utilização e eliminar a necessidade de ter que conhecer toda a estrutura desses projetos para saber onde estão os controles que queremos usar.

Ou seja, agora é possível ter acesso a todos os controles do Silverlight Toolkit ou SDK acrescentando apenas 2 namespaces na sua tela, como abaixo (mas lembre-se que ainda é necessário fazer referencias as dlls):

xmlns:toolkit=”http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit xmlns:sdk=”http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk

Tudo isso é muito interessante e muito legal mas o que me deixou intrigado é que eu não estava conseguindo encontrar informações em nenhum lugar que explicassem como é que eu poderia fazer meus frameworks e apis tirarem proveito desses recursos. Cheguei até a achar por um momento que esses novos namespaces estivesses fixos no Silverlight 4, mas como não era esse o discurso, tinha que have um jeito de implementarmos isso em nossas aplicações.

Foi então que eu tive a idéia de seguir um conselho que o Scott Hanselman vive repetindo quase como um mantra que é “ler código alheio para se tornar um programador melhor”. Tendo isso em mente eu fui ao codeplex e comecei a fuçar no código fonte do Silverlight Toolkit, até que achei o que estava procurando. Para que você possa tirar proveito desse recurso em suas próprias aplicações e frameworks, basta marcar o assembly com os atributos XmlnsPrefix e XmlnsDefinition, como demonstrado abaixo:

[assembly: XmlnsPrefix(http://schemas.wf.com.br/sdk, "wf")] [assembly: XmlnsDefinition(http://schemas.wf.com.br/sdk, "WF.Silverlight")] [assembly: XmlnsDefinition(http://schemas.wf.com.br/sdk, "WF.Silverlight.Controles")]

O lugar ideal para definir esses atributos é no arquivo AssemblyInfo do projeto. Para poder utilizar esses atributos é necessário referenciar o namespace System.Windows.Markup nas instruções de using no top da página.

O atributo XmlnsPrefix serve para criar um namespace e pré-definir qual será o seu prefixo quando um controle for adicionado diretamente pelo Visual Studio ou Expression Blend. Geralmente haverá apenas 1 atributo desse por projeto.

O atributo XmlnsDefinition é o responsável por vincular um namespace xml com um namespace do assembly. Esse atributo pode ser adicionado ao assembly quantas vezes for necessário. Geralmente haverá um atributo desse para cada namespace do assembly que contenha controles ou elementos que se deseja disponibilizar no xaml.

Uma coisa muito interessante que eu descobri é que os namespaces que você criar aparecem no intellisense do Visual Studio 2010, como pode ser visto abaixo:

 image

Espero que essas dicas tenham sido úteis. Eu sei que vou tirar proveito dessa nova funcionalidade nos meus próximos projetos.

Update 30/04/2010 : Encontrei um problema na implementação que demonstrei aqui. Devido a uma limitação do compilador do Silverlight, não é possível atribuir a propriedade x:Name a um controle definido por meio do novo xmlns se esse controle fizer parte do mesmo assembly em que está sendo utilizado. Ficou meio confuso, então vou tentar dar um exemplo:

Temos uma solution com um projeto. Esse projeto tem o seguinte xmlns:  xmlns:my=http://schema.minhaempres.silverlight e um controle chamado ControleA que está sendo “coberto” por esse xmlns. Se eu criar um ControleB nesse projeto, definir o uso do namespace “my” e utilizar o ControleA com a seguinte sintax, vai funcionar : . Se eu tentar atribuir a propriedade x:Name no meu ControleA, não vai mais funcionar. O problema é apenas com a propriedade x:Name e apenas se ambos os controles estiverem no mesmo assembly. Muitas vezes a gente consegue criar telas inteiras sem precisar dar nomes aos campos, principalmente graças ao uso de data binding, mas se for necessário fazer alguma animação, manipular o controle via code behind ou utilizar em algum TemplatePart de outro controle, tem que ter name.

Agora a boa notícia. Como esse erro só acontece se os 2 controles em questão estiverem no mesmo assembly, o workaround é simples, basta utilizar a declaração convencional de xmlns que usamos normalmente, onde dizemos o nome do assembly e namespace da classe.

Silverlight 4 RTM disponível para download

O Silverlight 4 RTM já está disponível para download.

O runtime do Silverlight 4 tem apenas 6 Mb. Em comparação, o Silverlight 3 tinha 4,7 e o Silverlight 2 tinha 4,77 (sim, o Silverlight 2 era maior que o Silverlight 3).

O Silverlight 4 Tools do para Visual Studio 2010 também está disponível para download no mesmo site. Se você pretende desenvolver aplicações utilizando Silverlight 4, este é o download que você deve fazer. Ele tem aproximadamente 30 Mb e é composto dos seguintes pacotes:

  • Runtime do Silverlight 4 RTW para desenvolvimento
  • SDK do Silverlight 4 RTW
  • Tooling para Visual Studio 2010 RTM (ferramentas e templates de projeto)
  • WCF RIA Services Release Candidate (com licença go-live)

Por conter a versão Release Candidate do WCF RIA Services, o Silverligth 4 Tools para Visual Studio 2010 também está marcado como RC, mas isso não significa que ele não esteja pronto para ser utilizado em produção. Prova disso é que o WCF RIA Services RC vem com licença go-live, que significa que já pode ser utilizado publicamente e terá suporte da Microsoft. A versão RTW do WCF RIA Services e, consequentemente, do Silverlight 4 Tools deve ser lançada ainda nesse semestre.

Também foram liberados hoje o Silverlight 4 Toolkit – Abril 2010 e o Expression Blend 4 Release Candidate. A versão final do pacote Expression Studio 4 também deve ser lançada ainda nesse semestre, mas não há nenhuma data definida. Vale lembrar que o upgrade do Expression 3 para o 4 será gratuito, portanto, se você não tem ainda não precisa esperar sair a próxima versão. Pode comprar agora.

Código fonte da demo do webcast MSDN sobre Silverlight4 + MEF

image

Hoje fiz um webcast ao vivo no MSDN sobre extensibilidade e otimização de aplicações em Silverlight 4 utilizando MEF. Em alguns dias este webcast estará disponível para download e eu atualizarei este post com o link para download do vídeo.

A demo que fiz durante o webcast foi feita utilizando o Visual Studio 2010 RTM e o Silverlight 4 RTM. No final desse post tem um link para baixar o arquivo com os fontes e o pptx da apresentação.

Abaixo tem também alguns links úteis sobre o assunto. Se tiverem alguma dúvida, basta postar um comentário aqui ou me mandar uma mensagem pelo Twitter, MSN ou email.

 

 

Update: Para quem assistiu ao webcast ao vivo, o minha última demo não funcionou corretamente mas o código fonte anexo já está “corrigido”. O problema estava na ordem que as ações estavam sendo executadas. O código ao vivo estava chamando a função DownloadAsync para baixar o xap adicional antes de incluí-lo no catálogo mestre. Acontece que ao fazer isso, o download estava terminado muito rápido, e quando chegou no catálogo mestre ele acabou não recompondo a aplicação. O código corrigido simplesmente inverte a ordem dessas 2 linhas no App.xaml.cs, fazendo com que a recomposição funcione.

 

MIX10 – Resumo

Essa semana aqui em Las Vegas foi uma loucura. Depois da aventura que foi chegar aqui, teve a correria do dia a dia da conferência. Só agora (que estou no aeroporto esperando meu vôo para voltar para casa) que consegui tempo para organizar minhas ideias e atualizar o blog.

Segunda Feira

Para começar, não consegui uma conexão de internet durante o keynote do primeiro dia e ainda peguei um lugar desfavorável para tirar fotos. O keynote foi excelente e teve como foco o Windows Phone 7. Muita coisa interessante foi demonstrada e o aparelho parece ser fantástico. Queria muito poder ter um  agora mesmo. Com certeza eu comprarei um assim que for lançado.

Após o keynote fui passear no The Commons. Essa era uma área onde tudo acontecia e todos se encontravam quando não estavam em alguma session. Lá encontrei Tim Heuer e John Papa, e aproveitei para gravar um pequeno podcast em vídeo com cada um para o XAMLCast. Esses vídeos, assim como outros que gravei serão publicados no XAMLCast em breve. Foi ótimo conversar com eles. Eu estava preocupado em como me sairia com o inglês pois essa foi minha primeira viagem para fora do Brasil e fiquei muito contente mesmo por ter meu inglês elogiado pelo Tim e John. It was AWESOME!

Depois fui assistir uma session de Windows Phone 7 com Chalie Kindel. Achei que foi muita maldade dos palestrantes ficarem demonstrando o aparelho em todas as session sabendo que não poderíamos ter um (brincadeira, é lógico que achei ótimo ver o aparelho. estou apenas com inveja). Passei o resto do dia no Commons tentando conversar com outras pessoas para gravar para o XAMLCast mas não consegui pois todos estavam correndo.

P1110627 P1110650

A noite fui fazer compras no outlet e depois passear pela Strip (Las Vegas Boulevard) com outros brasileiros que estavam no evento. Assistimos ao show das fontes do Bellagio do topo da torre Eiffel, no cassino Paris. Aproveitei para tirar algumas fotos da cidade enquanto estava lá.

Terça Feira

P1110708 P1110544 P1110753 P1110815

Na terça feira eu peguei um lugar ótimo no keynote e consegui uma conexão estável de internet. Tirei muitas fotos e twitei o tempo todo durante o keynote. Fiquei muito impressionado com o progresso do IE9 e absolutamente maravilhado com a apresentação de Bill Buxton. O cara é genial.

Após o keynote, assisti a mais uma session e depois fui para o Commons novamente. Consegui gravar apenas com o Pete Brown neste dia e ainda desligaram a luz enquanto estavamos gravando. Espero que a gravação tenha ficado boa. Fui convidado para participar da trívia no Channel 9 Live com Scott Hanselman mas eu seria chamado apenas se alguém amarelasse e isso não ocorreu. Mas eu respondi a pergunta de qual era o code nome do Windows 95 (se vocês assistirem, o Scott até fala que eu ganhei um ponto por isso :D ). Quase morri de rir assistindo à trívia.

A noite eu tentei ir a uma festa dos Blend Insiders mas não consegui achar o endereço. Depois dei uma passada na GameStop da galeria próxima ao Venetian. Na volta fui para meu quarto para tirar um cochilo antes de ir para a festa no LAX e só acordei do cochilo na manhã seguinte. Estava exausto.

Quarta Feira

P1110876 P1110886

Na quarta feira eu fui assistir a uma session excelente sobre a arquitetura da plataforma do Windows Phone 7 e fui convidado para participar de um grupo de foco sobre Windows Phone 7 e dar feedback sobre o que achava sobre como está sendo feito o lançamento e quais eram as preocupações que tinhamos. Infelizmente não posso divulgar o que foi conversado no grupo de foco por causa de NDA (Non Disclosure Agreement). O importante é saber que eles estão ouvindo e vão levar em considração várias das preocupações que as pessoas estão tendo.

A noite fui fazer minhas últimas compras e depois fui com uns amigos da Microsoft Brasil assistir ao Cirque du Soleil –“O” no Bellagio. Que espetáculo maravilhoso! Pressinto mais uma coleção de DVD em minhas prateleiras em breve, mas essa eu farei com calma.

Durante esta viagem eu devo ter andado uns 40 Km no total. O mapa de Las Vegas engana e os lugares são muito mais longe do que parece. Minhas pernas não gostam mais de mim… O clima em Las Vegas é muito seco e estou com a boca toda rachada e nariz ressecado. Conheci muita gente, treinei meu inglês falado, me diverti bastante e aprendi muito. Não ganhei nada no cassino :(.

Em breve vou começar a postar aqui algumas dicas e tutoriais sobre desenvolvimento em Silverlight 4, Windows Phone 7 e afins. Os vídeos que gravei para o XAMLCast serão publicados em breve. Fiquem ligados e até mais.

Diario de Bordo MIX10 - Domingo

Galera,

Já é domingo (dia 14/março) e eu achei que seria interessante postar como está sendo o MIX10 para mim até agora e o que espero dos próximos dias.

Pra começar, a aventura, quer dizer, viagem. Perdi o horário do meu vôo saindo de São Paulo por causa do trânsito da minha cidade querida. Levei mais de 3 horas pra chegar no aeroporto. Me colocaram em um vôo seguinte 1:30h mais tarde, mas tiveram que refazer minha conexão. Originalmente a viagem era São Paulo –> Miami –> Las Vegas, com chegada às 10:10 e duração aproximada de 17 horas. Agora seria São Paulo –> Miami –> Los Angeles –> Las Vegas, chegando 12:30, mas ainda com duraçáo aproximada de 17 horas, só que saindo um pouco mais tarde. Acontece que eu não estava com sorte. O vôo para Miami foi tranquilo, mas o vôo de Miami para Los Angeles atrasou quase 2 horas na decolagem por causa de problemas na hora de carregar a bagagem. Quando decolamos eu já sabia que havia perdido a conexáo em LA. Pousamos em LA na hora que eu deveria estar chegando em Vegas. Chegando lá, marinheiro de primeira viagem, fui buscar minha mala na esteira (não precisava pois era conexão). Perdi uma hora nessa bincadeira e mais 30 minutos na fila da reclamação de bagagens. Depois do susto de achar que tinham perdido minha mala fui refazer minha conexão novamente. O próximo vôo para Vegas era as 16:35. Conexão “concertada", hora de comer alguma coisa pois já era 14:40 (19:20 no Brasil) e já fazia 12 h que eu havia comido algo. Fui “almoçar” um trash-food no Burger King do aeroporto e depois fui esperar meu vôo. Cheguei em Vegas às 18:30.

Que aventura. Eu tinha planos de fazer comprar no sábado e turismo hoje, mas meus planos tiveram que mudar. Para fazer um pouco de turismo enquanto fazia parte das compras hoje, fui a pé. Devo ter andado uns 12 Km. Fui do Luxor (onde estou hospedado) até o Ceasars Palace e voltei. Depois fui na direção oposta, para a loja da Frys e voltei. Por falar nisso, que lugar é aquele?!?! Precisamos de uma loja como a Frys em São Paulo. Imaginem um lugar do tamanho de um Sam’s Club, dedicado apenas a eletrônica e informática. Esse lugar é a Frys. Adorei! Ainda falta eu passar no Outlet pra comprar uma roupas. Terei que fazer isso amanhã de a noite. Me desejem sorte.

Amanhã é o grande dia. Em algumas horas começa o MIX10. Me acompanhem no Twitter (@kelps e @xamlcast) que estarei postando detalhes direto durante todo o Keynote e durante alguns momentos interessantes ao longo do evento.

Não se esqueçam o Keynote começa as 13:00 no horário do Brasil (9:00 AM em Las Vegas - eu errei no post anterior). Se puderem, acompanhem ao vivo em http://live.visitmix.com.

Tags: MIX10 Eventos MIX