Avalon em Windows 2003 e XP SP2 – Sample Code

Publicado: 21/12/2004 em IntoSpaces
Pessoal!!
Na espera do LongHorn chegou até nossas mãos ha algum tempo um Preview do Avalon, conjunto de classes que serão essenciais no desenvolvimento para LongHorn.

Esse preview é uma amostra do poder que teremos em mão de agora para frente, tanto para LongHorn, quanto para Windows Server 2003 e Windows XP SP2, isso mesmo o Avalon diferente do Winfs rodará nessas versões anteriores ao LongHorn.

Em meus primeiros testes com os samples, pude notar como o XAML é poderoso e flexível para esse "novo modelo" para criação de aplicações.
Vou deixar aqui um Screen Shot de um sample, mesmo que o Ricardo Mendes mostrou no TTT pra gente, para quem não viu aí está uma Login Screen em Avalon e já se valendo de seus recursos.

Avalon – Halo
Screen Shot do sample Login Screen, que vem junto com o SDK do WinFX

Avalon – Baby
Outro Screen Shot personalizado, agora com a cara que o usuário Tobey escolheu

Notem os diversos usuários, cada um tem sua tela de login que é alterada facilmente quando se seleciona um deles.
Como faríamos isso em um Winform de hoje em dia????
Daria um trabalho terrível não?
Bom com o avalon é bem simples, vejam o código que controla isso

namespace LoginScreen
{
   using System;
   using System.Collections;
   using System.IO;
   using System.Windows;
   using System.Windows.Controls;
   using System.Windows.Media;
   using System.Windows.Navigation;
   using System.Windows.Serialization;
   using System.Windows.Input;
   using System.Windows.Media.Animation;

   public partial class Default
   {
      private static FrameworkElement _newResources;
      private static bool resourceLoaded = false;
      FrameworkElement _defaultStyle;
      FrameworkElement _lunaStyle;
      FrameworkElement _toonsStyle;
      FrameworkElement _xBoxStyle;

   private void Init(object sender, System.EventArgs args)
   {
      _defaultStyle = (FrameworkElement)new Resources_Default();
      _lunaStyle = (FrameworkElement)new Resources_Luna();
      _toonsStyle = (FrameworkElement)new Resources_Toons();
      _xBoxStyle = (FrameworkElement)new Resources_XBox();
      Brush brush = (Brush)_defaultStyle.Resources["LogoBrush"];
      brush = (Brush)_defaultStyle.Resources["WaterMarkBrush"];
      brush = (Brush)_lunaStyle.Resources["BlueBall"];
      brush = (Brush)_lunaStyle.Resources["WaterMarkBrush"];
      brush = (Brush)_lunaStyle.Resources["LogoBrush"];
      brush = (Brush)_toonsStyle.Resources["LogoBrush"];
      brush = (Brush)_toonsStyle.Resources["WaterMarkBrush"];
      b
rush = (Brush)_xBoxStyle.Resources["GoldBall"];
      brush = (Brush)_xBoxStyle.Resources["WaterMarkBrush"];
      brush = (Brush)_xBoxStyle.Resources["LogoBrush"];
      _newResources = _defaultStyle;
      _newResources.Resources.BeginInit();
      _newResources.Resources.EndInit();
      body.Resources = _newResources.Resources;
   }

   private void OnMouseEnter(object sender, MouseEventArgs args)
   {
      resourceLoaded = true;
   }

   void ChangeUser(object sender, SelectionChangedEventArgs e)
   {
      if (!resourceLoaded)
         return;

      switch
(UserTilesListBox.SelectedIndex)
      {
         case 0:
            _newResources = _defaultStyle;
         break;
         case 1:
            _newResources = _lunaStyle;
         break;
         case 2:
           _newResources = _toonsStyle;
         break;
         case 3:
            _newResources = _xBoxStyle;
         break;
      }

      _newResources.Resources.BeginInit();
      _newResources.Resources.EndInit();
      body.Resources = _newResources.Resources;
      }
   }
}

Baicamente são 4 estilos que são armazenados como Resource na compilação e em tempo de execução, ao se escolher um usuário com o famoso switch faz se a escolha e troca de estilo. Relativamente simples não?
Agora vamos olhar um trecho do estilo do XBox, que está em XAML.

<

Style def:Name="CustomBackground">
   <Button Width="100%" Height="100%" />
   <Style.VisualTree>
      <Canvas Width="100%" Height="100%" Background="VerticalGradient #666666 black">
         <Rectangle Width="100%" Height="100" Fill="VerticalGradient #666666 black" Stroke="#66cccccc" StrokeThickness="3" />
         <Rectangle Width="100%" Height="60" Canvas.Bottom="0" Stroke="#66cccccc" Fill="VerticalGradient #666666 black" StrokeThickness="1"/>
      </Canvas>
   </Style.VisualTree>
</Style>Vejam que as informações do visual, suas formas cores e coordenadas estão todas nesse formato XAML, baseado no XML que todos conhecemos, isso da um dinamismo muito grande para sua aplicação.
Nesse caso o arquivo resources_xbox.xaml foi compilado como um resource, porém ele pode ficar na pasta da aplicação e ser carregado em tempo de execução, flexibilizando mais ainda sua aplicação.

Com tudo isso nossas UIs ficarão muito mais ricas, sendo que o desenho vetorial esta muito presente nesse novo modo de desenvolver, só temos a ganhar com isso, como eu digo, agora sim eu senti firmeza!!! eheheh

Tentei mostrar aqui esse início de minha experiência com essa nova feature do .NET que está chegando para nós e assim despertar curiosidade para estudarem e verem tudo que o Avalon pode fazer por nós e para nós! Ainda nem comentei dos recursos 3D, mas ainda vamos matar essa Applet do último post em grande estilo😉

Espero que tenham gostado, pelo menos 1/10 do que eu gostei desse novo mundo!!

Para quem quiser ler mais sobre esse preview comece por aqui
Avalon November 2004 Community Technology Preview

[]’s
Shinji

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s