segunda-feira, 2 de fevereiro de 2009

Silverlight: Interoperabilidade

Mais um exemplo de Silverlight pode ser conferido aqui. E esse quase acertei no
Free Image Hosting at www.ImageShack.us
Design. Neste exemplo mostro como é possível interagir com a página HTML diretamente de dentro do Silverlight. Da mesma forma que podemos fazer com que o Silverlight responda a eventos disparados na página HTML.


    public HtmlElement HtmlDiv { get; set; }

    public HtmlElement HtmlButton { get; set; }

 

    public Page()

    {

      // Required to initialize variables

      InitializeComponent();

      this.HtmlDiv =

        HtmlPage.Document.GetElementById("myDiv");

 

      this.HtmlButton =

        HtmlPage.Document.GetElementById("btnId");

 

      this.HtmlButton.AttachEvent(

        "onclick",

        new EventHandler<HtmlEventArgs>(ToSilverlight_OnClick)); 

    }

Nesse caso, estou apenas escrevendo e lendo dentro do innerHTML de uma div na página através dos métodos da classe ScriptObject GetProperty e SetProperty. De dentro do Silverlight associo um evento de um botão HTML comum e digo que o Silverlight passará a responder a esse evento.

    public string DivInnerHTML

    {

      get

      {

        return this.HtmlDiv.GetProperty("innerHTML").ToString();

      }

      set

      {

        this.HtmlDiv.SetProperty("innerHTML", value);

      }

    }

Como podemos ver a forma como o Silverlight interage com a página através de código gerenciado torna a vida de nós desenvolvedores muito mais fácil.

domingo, 25 de janeiro de 2009

Download Assíncrono com Silverlight 2

Acabo de concluir um novo exemplo com Silverlight 2. É uma aplicação muito simples e o tempo de implementação foi bastante baixo comparado ao que teria que ser feito para fazer semelhante em HTML.

Tenho uma tela e nela carrego uma imagem com tamanho bem grande (6750 x 4200, 5,84 MB). Ela é carregada assincronamente, após ser carregado o controle.
Image Hosted by ImageShack.us
De posse do evento DownloadProgress do objeto BitmapImage podemos mostrar o progresso do download. O DownloadProgressEventArgs nos dá a propriedade Progress, um número de 0 a 100 com o percentual de download feito.

    public Page()

    {

      // Required to initialize variables

      InitializeComponent();

      var image = new BitmapImage();

      image.DownloadProgress += (sender, e) =>

        {

          this.ProgressTextBlock.Text = e.Progress.ToString();

        };

      //Objeto Uri com o endereço da imagem

      image.UriSource = this.ImageObsoluteUri;

      this.DownloadedImage.Source = image;

    }

Como podemos ver, com Silverlight temos uma maneira bem fácil e prática de mostrar download de arquivos.

Aproveitei e coloquei a funcionalidade de Full Screen, onde pode ser visto que todo o componente foi feito para que suas proporções e posicionamentos não se alterassem de modo que ficasse destorcido. Quem trabalha com HTML sabe os problema que existem em deixar algo bem centralizado e organizado em qualquer browser. Quem quiser dar uma conferida, aqui está o link do exemplo on-line.

quarta-feira, 21 de janeiro de 2009

Efeito de luz em Silverlight

Acabo de publicar um novo exemplo de Silverlight 2.0 em meu site. Tomei por base um exemplo em que temos uma Image e na sua frente um Rectangle com GradientBrush. Nesse GradientBrush temos de um lado a cor preta e do outro a mesma cor com transparência. Com o movimento do mouse é alterado o posicionamento do GradientBrush e dá impressão de ser uma lanterna focando a imagem. Este exemplo pode ser conferido aqui.