Alinhamento de items dentro de uma ListBox

Ao desenvolver diariamente para Windows Phone por vezes deparo-me com situações em que nem tudo o que parece, realmente o é… esta é uma dessas situações!

Cenário inicial: numa PhoneApplicationPage vazia, adicionamos o seguinte bloco de XAML ao conteúdo da Grid ContentPanel:

<ListBox ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TextBlock Text="{Binding}" Style="{StaticResource PhoneTextTitle2Style}" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Como podem aqui ver, estamos a criar uma ListBox com um template muito simples (para cada item, apresentar um TextBlock usando o próprio item como texto).

Do lado do código temos uma propriedade Items que tem apenas e só 3 items e que vão servir para alimentar a propriedades ItemsSource da nossa ListBox.

Até aqui tudo bem, ao executar a aplicação o resultado deverá ser este:

Digamos que agora pretendemos alinhar o texto de cada item à direita; normalmente, a seguinte alteração seria suficiente:

<TextBlock Text="{Binding}" HorizontalAlignment="Right" Style="{StaticResource PhoneTextTitle2Style}" />

Ao executar novamente a aplicação, poderemos ver que o resultado se mantém inalterado!

Nesta altura, começamos a testar as propriedades da própria ListBox, ao ponto de fazer algo deste tipo:

<ListBox HorizontalContentAlignment="Right">

E mais uma vez, ao executar poderemos reparar que nada mudou!!!

O que se passa é que cada item da ListBox é instanciado dentro de um ListBoxItem, e este controlo ignora por completo a propriedade HorizontalContentAlignment colocada na própria ListBox.

Para resolver este problema, temos que definir a propriedade ListBox.ItemContainerStyle e ai sim colocar o ListBoxItem.HorizontalAlignment pretendido.

O código corrigido ficará estão da seguinte forma:

<ListBox ItemsSource="{Binding Items}">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalAlignment" Value="Right"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TextBlock Text="{Binding}" Style="{StaticResource PhoneTextTitle2Style}" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

E aqui temos o resultado final:

Pessoalmente, coloco sempre o ListBoxItem.HorizontalAlignment com o valor HorizontalAlignment.Stretch, e depois controlo o alinhamento do item propriamente dito dentro do template; com esta segunda abordagem tenho a garantia de que o item dispõe realmente da largura total da ListBox para apresentar resultados!

Geosense

A minha mais recente aplicação para Windows Phone já se encontra disponível: Geosense!

A ideia para esta aplicação tem uma história que está relacionada com o Windows Phone App Code Camp: a verdade é que quando estava em viagem para o local do evento, acabei por me perder!!!

Nessa altura, lembrou-me que na página oficial do evento no Facebook, o Miguel Vicente tinha colocado as coordenadas do local, e então tentei recorrer a elas para chegar a bom porto:

Infelizmente, tal acabou por não sei possível, dado que elas estavam num formato que não era reconhecido pelo Windows Phone… aparentemente, a aplicação de mapas do Windows Phone apenas aceita coordenadas no formato Decimal Degrees (algo mais do tipo “1.2345, 6.7890″), enquanto que as que podem ver acima estão em formato DMS (podem ler aqui mais sobre estes formatos de coordenadas GPS)!

Ora aqui estava então uma excelente oportunidade para fazer uma aplicação simples e com grande utilidade para os utilizadores do Windows Phone!!! :)

O Geosense aceita coordenadas em formato Decimal Degrees, MinDec e DMS, ou então uma morada completa; com essa entrada de dados, apresenta um conjunto de informações relativas ao local pedido, nomeadamente as coordenadas nos três formatos, a morada, a freguesia, o distrito, o país, o código postal…

Do ecrã de resultados é mesmo possível abrir a aplicação de mapas na localização especificada, ou copiar e enviar os dados!

Incluído está ainda um botão no ecrã principal para que com um simples toque seja possível obter as coordenadas actuais do dispositivo!

Juntamente com o CTT Objectos e O meu Salário, esta é já a minha terceira aplicação gratuita que lanço no Marketplace!

Cliquem no seguinte botão para ver mais detalhes e instalar:

Para facilitar, podem utilizar a funcionalidade Bing Vision presente no Search do vosso Windows Phone, e apontar a câmara para a imagem seguinte:

Amazon Web Services SDK for Windows Phone

A Microsoft apresentou ontem a primeira versão Beta do Amazon Web Services SDK for Windows Phone!

O SDK contém uma série de componentes que vem facilitar o desenvolvimento de aplicações para Windows Phone que comuniquem com alguns dos serviços prestados pela Amazon Web Services, como por exemplo o S3, o SimpleDB, e o SQS Cloud Services.

Para facilitar a sua utilização, a Microsoft disponibilizou ainda um artigo “Getting Started” com uma série de tutorais.

Este SDK está disponível em código aberto no GitHub sob licença Apache 2.0.

App Me Up

 

Depois do estrondoso sucesso do Windows Phone App Code Camp em Dezembro passado, a Microsoft apresenta mais uma iniciativa de promoção ao desenvolvimento para Windows Phone: App Me Up!

Numa página muito completa, reuniu toda a informação necessária para ajudar aqueles que querem desenvolver aplicações para Windows Phone, independentemente de serem iniciados ou profissionais: o software necessário, a documentação e vários tutoriais e vídeos de aprendizagem, a informação relativa à publicação no Marketplace (até mesmo informação para quem pretender publicar as suas aplicações, mas que ainda não tem conta no AppHub), e a projecção das aplicações feitas em Portugal! :)

Mas há mais: podem ainda encontrar o programa App VIP, em que serão oferecidos equipamentos Nokia Lumia para as melhores aplicações, e para quem tiver pelo menos 5 aplicações publicadas!!!

Então? Estás à espera de quê? :D

Cimbalino Windows Phone Toolkit v1.2

Ultimamente não tenho tido a oportunidade de actualizar o blog com a mesma frequência que vinha a fazer, e a principal razão foi mesmo de me ter dedicado a melhorar o Cimbalino Windows Phone Toolkit, culminando hoje esses melhoramentos com o lançamento da versão 1.2!

As alterações são (mesmo) muitas, especialmente no número de serviços agora suportados e nos  extension methods, mas para além disso foram adicionados três novos projectos:

Os projectos DeviceInfo e o UserInfo expõe serviços que permitem aceder ao DeviceExtendedProperties e UserExtendedProperties respectivamente; já o Location expõe um serviço que permite utilizar a capacidades de geolocalização presentes no sistema operativo!

Os próximos artigos do blog serão certamente sobre as novidades desta versão, bem como exemplos e novas samples!

O código está disponível no sítio do costume, bem como os pacotes de NuGet! ;)

Eu e o meu Nokia Lumia 800 uma semana depois!

Faz pouco mais de um ano que escrevi um artigo semelhante a este sobre a minha experiência pessoal com o Samsung Omnia 7 ao fim de uma semana de uso; dado que actualmente passei a utilizar um Nokia Lumia 800, pareceu-me adequado escrever um pouco sobre este fantástico equipamento!

O que salta mesmo à primeira vista no Lumia 800 é o seu ecrã AMOLED curvado, com tecnologia Gorilla Glass, que o torna praticamente à prova de riscos! O design do equipamento é fabuloso e os materiais do corpo parecem ser de grande qualidade.

Tanto o Omnia 7 como o Lumia 800 tem o mesmo nível de pretos do ecrã, resultantes do ecrã AMOLED que eles tem; no entanto noto que o nível de brilho máximo do Nokia é superior ao do Samsung, algo que foi uma agradável surpresa!

A nível de tamanho, o Omnia 7 é um pouco maior que o Lumia 800, o que resulta nos ecrãs de 4 e 3.7 polegadas respectivamente.

Para fechar, uma surpresa que para mim foi muito agradável: no momento em que comecei a utilizar o Omnia 7 deixei de poder usar o Hands-Free Bluetooth Kit do meu Seat, algo que sempre culpei o Windows Phone (dado que experimentei outros equipamento também, sempre sem sucesso)… não é que a Nokia parece que arregaçou as mangas e resolveu o problema? :)

Rescaldo do Windows Phone App Code Camp

3 dias no Palmela Village Golf Resort, cerca de 60 pessoas de todas as idades (estudantes, programadores profissionais e amadores, designers, etc.), 30 projectos de aplicações Windows Phone, vários equipamentos Windows Phone para usarem (e abusarem!), algumas sessões técnicas à mistura e o acompanhamento meu e do Nuno Silva nos seus projectos…

Resumindo numa só palavra: Sucesso!!!

Pessoalmente, foi o evento mais desgastante e simultaneamente mais gratificante que tive o prazer de colaborar!!!

No final, o espírito de missão cumprida e saber que existem agora mais 60 pessoas impressionadas com a facilidade que é desenvolver para Windows Phone, e o enorme potencial disso! :)

Ficam ainda os parabéns à organização do Nuno Silva, do André Malico e do Miguel Vicente, e a esperança de serem realizados novos Windows Phone App Code Camp num futuro próximo! ;)

Nokia Lumia 800 skin

O emulador do Windows Phone apresenta uma skin muito básica de um dispositivo genérico, mas pela internet podemos encontrar várias skins alternativas, nomeadamente a do Nokia Lumia 710 disponibilizada pela Telerik, e a do Samsung Focus pelo Jeff Wilcox.

Nesse sentido, procurei por uma do Nokia Lumia 800, mas as (várias!) que encontrei tinham todas baixa qualidade, sendo resultado de imagens de fraca definição…

Nesse sentido, tratei de criar a minha própria skin do Nokia Lumia 800 para o emulador do Windows Phone, e o resultado pode ser visto ao lado! :)

Esta é uma skin com imagens de alta resolução, com os seguintes botões totalmente funcionais:

  • Back/App switcher
  • Start/Speech
  • Search
  • Volume Up
  • Volume Down
  • Camera

Nota: apesar de o botão “Power” estar também presente e fazer a devida animação(!), este parece não funcionar com o Windows Phone!

Podem fazer download da skin aqui! ;)

Candidaturas ao WP App Code Camp terminam dentro de 2 dias…

… por isso não percam tempo e tratem de enviar já a vossa! :D

Relembro: 3 dias (de 16 a 18 de Dezembro), no Palmela Village Golf Resort com tudo pago(!), para terem todo o tempo e apoio para concretizarem aquela ideia que tiveram para uma aplicação no Windows Phone!

Para quem não viu anteriormente o anúncio do evento, aqui tem a informação sobre o registo:

O registo no WP7 App Code Camp é gratuito (yup!), e porque as vagas são muito, muito limitadas, para assegurar o teu lugar deverás enviar um e-mail até 9 de Dezembro para t-andma@microsoft.com e provar que tu, ou a tua equipa, merecem uma vaga. Como? Basta que no e-mail incluas as seguintes informações:

  • dados pessoais individuais ou da tua equipa (até 2 elementos) – nome, telefone, e-mail;
  • numa frase, explicar qual a ideia de app que vais/vão desenvolver no Camp;
  • numa frase, porque deves/devem ser o(s) escolhido(s)? 

Iremos, então, notificar quais os seleccionados até ao dia 12 de Dezembro!

Posso desde já confirmar que em resposta a um convite que me foi feito pela Microsoft, estarei presente no evento para juntamente com o Nuno Silva dar apoio a todos os presentes na criação das suas aplicações! :)