Dev (Back & Front)ARTIGO

Windows Phone 7, indo além do hello world – Parte 03

Antes de iniciar a última parte desta série, gostaria de abrir este tópico desejando a todos um ótimo 2011.

Vale lembrar que o conteúdo do artigo está divido em três partes:

Todos prontos? Vamos lá!

Abra o projeto e verifique se sua “Solution Explorer” está desse jeito:

Se sua resposta foi NÃO, você acertou! Perceba que a pasta “Service References” ainda não existe no projeto e é ela que iremos criar agora. Será esse serviço que fará a ponte entre nossa aplicação Windows Phone 7 e nossa WCF.

Para adicionar o “Service References”, é só seguir os seguintes passos:

Clique com botão direito sobre o projeto e clique na opção “Add Service Reference”.


Depois de clicar em “Add Service Reference”, teremos a seguinte tela:

Antes de prosseguirmos, vamos à algumas informações úteis sobre essa tela:

  1. O botão “Discover” vai procurar serviços que estejam dentro da sua solução. Ao clicar nesse botão, os serviços aparecerão no campo “Address”.
  2. Clicando em GoGo23 conteúdosEntendendo o Green Tea GC do Go 1.26Dev (Back & Front) · mai 2026Função recursiva em Go para acessar valores em mapas aninhadosDev (Back & Front) · set 2025Publicando projeto desenvolvido em Golang em um server grátisDev (Back & Front) · mar 2025Ver tudo em Dev (Back & Front) , aparecerão de fato seus serviços na caixa “Services”.
  3. Expandindo o serviço selecionado, você poderá ver os métodos contidos nele através da caixa “Operations“.

Clicando em OK, nossa “Solution Explorer” ficará assim:

Pronto, agora temos uma interface de comunicação entre nossa aplicação Windows Phone 7 e o mundo exterior, através do nosso serviço. Clique com o botão direito sobre o MainPage.xaml e selecione a opção “View Code” ou simplesmente F7.

Como iremos implementar um número considerável de linhas, irei escrevendo e comentando cada bloco e no final disponibilizarei todo o projeto para que vocês possam implementar nos seus projetos, ok?

Antes de mais nada, vamos trazer o nosso serviço através do Namespace que nós demos anteriormente. Lembre-se de que estou usando meu projeto. Caso você tenha criado com nomes diferentes, fique atento para não colocar o nome errado nos arquivos ou nas chamadas.

using Zodiac.SR_Zodiac;

Criamos  um “enum” para representar os 12 signos do zodíaco, de modo que não precisaremos informar o número que representa o signo, e sim o nome.

public enum SIGNO<br />{<br /> ARIES = 1,<br /> TOURO = 2,<br /> GEMEOS = 3,<br /> CANCER = 4,<br /> LEAO = 5,<br /> VIRGEM = 6,<br /> LIBRA = 7,<br /> ESCORPIAO = 8,<br /> SAGITARIO = 9,<br /> CAPRICORNIO = 10,<br /> AQUARIO = 11,<br /> PEIXES = 12,<br />}

Criamos um método para alterar o título da tela de acordo com o signo escolhido.

        private void EscreveTitulo(SIGNO p_nValue)<br />        {<br />            switch (p_nValue)<br />            {<br />                case SIGNO.ARIES:<br />                    this.txtTituloPrevisao.Text = "Áries - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.TOURO:<br />                    this.txtTituloPrevisao.Text = "Touro - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.GEMEOS:<br />                    this.txtTituloPrevisao.Text = "Gêmeos - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.CANCER:<br />                    this.txtTituloPrevisao.Text = "Câncer - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.LEAO:<br />                    this.txtTituloPrevisao.Text = "Leão - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.VIRGEM:<br />                    this.txtTituloPrevisao.Text = "Virgem - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.LIBRA:<br />                    this.txtTituloPrevisao.Text = "Libra - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.ESCORPIAO:<br />                    this.txtTituloPrevisao.Text = "Escorpião - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.SAGITARIO:<br />                    this.txtTituloPrevisao.Text = "Sagitário - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.CAPRICORNIO:<br />                    this.txtTituloPrevisao.Text = "Capricórnio - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.AQUARIO:<br />                    this.txtTituloPrevisao.Text = "Aquário - Seu Horóscopo Hoje:";<br />                    break;<br />                case SIGNO.PEIXES:<br />                    this.txtTituloPrevisao.Text = "Peixes - Seu Horóscopo Hoje:";<br />                    break;<br />                default:<br />                    break;<br />            }<br />        }

Criamos um método chamado LoadService. Esse método irá disparar um evento criado por nós para que as informações desejadas sejam exibidas na tela do aparelho.

LoadService:

public void LoadService(SIGNO p_nValue)<br />        {<br />            try<br />            {<br />                ServiceZodiacClient zc = new ServiceZodiacClient();<br />                zc.GetPrevisaoCompleted += new EventHandler<SR_Zodiac.GetPrevisaoCompletedEventArgs>(zc_GetPrevisaoCompleted);<br />                zc.GetPrevisaoAsync((int)p_nValue);<br />                this.EscreveTitulo(p_nValue);<br />            }<br />            catch (Exception ex)<br />            {<br />                throw ex;<br />            }<br />        }

Evento zc_GetPrevisaoCompleted:

void zc_GetPrevisaoCompleted(object sender, SR_Zodiac.GetPrevisaoCompletedEventArgs e)<br />        {<br />            try<br />            {<br />                int pos = -1;<br />                String sTexto;<br /><br />                this.ContentGrid.Visibility = System.Windows.Visibility.Collapsed;<br />                this.TextGrid.Visibility = System.Windows.Visibility.Visible;<br /><br />                sTexto = e.Result.ToString();<br />                pos = sTexto.IndexOf("<a");<br /><br />                this.txtPrevisao.Text = sTexto.Substring(0, pos - 1);<br />            }<br />            catch (Exception ex)<br />            {<br />                this.txtPrevisao.Text = ex.Message;<br />            }<br />        }

E, no evento KeyDown de cada signo, chamaremos o método LoadService, passando como parâmetro o valor correspondente ao signo clicado.

private void iAries_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)<br />        {<br />            try<br />            {<br />                this.LoadService(SIGNO.ARIES);<br />            }<br />            catch (Exception ex)<br />            {<br />                throw ex;<br />            }<br />        }

Explicando:

No método LoadService, criamos um objeto ServiceZodiacClient para poder fazer a comunicação com nosso serviço. Esse serviço trabalha com eventos, ou seja, é preciso que um evento seja disparado para que ele seja “ativado” e por isso escrevemos a linha “zc.GetPrevisaoCompleted += new EventHandler…”, estamos fazendo uma chamada do evento GetPrevisaoCompleted do nosso serviço.

No “zc.GetPrevisaoAsync”, estamos passando o valor do parâmetro esperado pelo serviço. Depois disso, nosso evento é disparado, e o resultado retornado é o texto vindo do xml recuperado, como vimos na parte 2 do artigo.

Na prática, nossa aplicação final funcionará assim:

Clicamos sobre o signo selecionado.

E obtemos o horóscopo do dia.

Bem, pessoal, aqui fecho essa série de artigos sobre Windows Phone 7. Os arquivos utilizados nessa série estão aqui.

Uma abraço a todos e até o próximo artigo.

Formado em Análise de Sistemas pela Unibratec (PE) e Pós Graduado em Gerenciamento Ágil de Projetos pelo C.E.S.A.R. Edu (PE). Atualmente trabalha como Analista de Projetos na CSU CardSystem.

Ver perfil