Mostrando postagens com marcador WPF. Mostrar todas as postagens
Mostrando postagens com marcador WPF. Mostrar todas as postagens

domingo, 20 de fevereiro de 2011

Recursos do Windows 7 para WPF

Com a chegada do Windows 7 vários novos recursos foram disponibilizados aos desenvolvedores. Preview da janela,Aero Peak botões de controle na barra de tarefas e notificações diretamente no ícone.
Logo no lançamento do Windows 7 era bastante complicado, se perdia muito tempo aprendendo as novas API do SDK com wrappers para o WPF. Realmente perdíamos bastante tempo mesmo que fosse apenas pra colocar um botão no Preview da barra de tarefas.
Com a chegada do WPF 4 isso tudo ficou muito mais fácil. Através da propriedade TaskbarItemInfo da Window podemos ter acesso a esta grande API do Windows 7 e aprimorar ainda mais a experiência do usuário.
TaskbarItemInfo
Esta propriedade permite que possamos interagir com o ícone da nossa aplicação na barra de tarefas. As seguintes propriedades nos proporcionam essa facilidade:
  • Description: Descrição que aparecerá acima do Preview do Aero Peak.
  • Overlay: Define uma imagem que aparecerá na mesma posição do ícone da barra de tarefas. Isso nos permite mostrar informações mesmo quando a aplicação está no plano de fundo e o usuário está executando outras ações em outros programas.
  • ThumbnailClipMargin: Se não quisermos mostrar no Aero PeakPreview parcial do Video Player a visualização completa de nossa aplicação podemos definir através dessa propriedade qual parte deve ser mostrada no Preview.
    • ProgressState: Indica o estado da aplicação. Podemos definirVisual Studio após carregar um projeto esta propriedade de modo que avise o usuário que está sendo processada uma tarefa em tempo indeterminado, que ocorreu um erro ou a aplicação está parada e requer sua atenção.
    • ProgressValue: Utilizada quando se sabe o progresso de umaProgresso de Download no Internet Explorer atividade e se quer mostrar na barra de tarefas. É muito semelhante a um ProgressBar que não esteja sendo utilizado como Indeterminate.
    • ThumbButtonInfos: Aqui podemos colocar vários botões que,Botões de controle do Media Player através do Aero Peak, façam com que o usuário interaja com a aplicação mesmo ela estando no plano de fundo. Podem ser visualizados até 7 botões ao mesmo tempo.
    Fiz uma pequena aplicação conceito para aplicar tudo isso.Video Player Criei um Video Player que busca um vídeo via Streaming do Channel9. Utilizei o TaskbarItemInfo da seguinte forma:
    • Utilizei a barra de progresso na barra de tarefas para mostrar enquanto ainda está sendo feito buffer do vídeo.
    • Quando o vídeo começar a rodar coloco um Overlay na barra de tarefas semelhante a um botão Play.
    • Defini que no Preview do Aero Peak só mostraria a parte do vídeo e não os controles.
    • Adicionei um botão para fechar diretamente no Preview (eu sei, é redundante, mas é só pra mostrar o conceito).
    Para adicionar toda essa funcionalidade a minha aplicação não levei mais do que alguns minutos. Demora mais pra achar imagens legais e tal. Mas acho que deu pra entender a ideia. O XAML que tive que adicionar é o seguinte:
    <Window.TaskbarItemInfo> <TaskbarItemInfo x:Name="StatusTaskbarItemInfo" ProgressState="Indeterminate" Description="Video Player" ThumbnailClipMargin="15,54,17,75"> <TaskbarItemInfo.ThumbButtonInfos> <ThumbButtonInfo Description="Fechar" Click="ThumbButtonInfo_Click" ImageSource="...sua imagem aqui..."> </ThumbButtonInfo> </TaskbarItemInfo.ThumbButtonInfos> </TaskbarItemInfo> </Window.TaskbarItemInfo>
    O código do exemplo bem como uma aplicação pronta (ClickOnce) pode ser encontrados aqui.
    Enjoy

    domingo, 23 de janeiro de 2011

    WPF com Splash Screen

    Desde sempre estamos acostumados a aplicações que precisam de um tempo de espera relativamente grande para iniciar. Isso aconteceu e ainda acontece com aplicações WIN32 que ao iniciarem precisam de uma grande quantidade de arquivos carregados na memória.

    Já se foi o tempo onde o .NET era muito lento para carregar. Época em que tínhamos computadores com menos de 1GB de RAM e apenas um processador e núcleo com menos de 1GHz. Não me refiro a aplicação rodando mas sim o tempo que demorava para carregar na memória as DLL do Framework e aplicação num Cold Start. Mas mesmo assim, hoje ainda não é instantâneo.

    Uma solução que aumenta a experiência do usuário éSplash Screen do Windows Live Writer a utilização de um Splash Screen, efeito muito utilizado por vários tipos de aplicações: Adobe Photoshop, NetBeans, Visual Studio, Windows Live Writer são alguns exemplos.

    Hoje vou mostrar como colocar um Splash Screen Splash Screen do Visual Studio 2010no WPF fazendo com a resposta ao usuário ao chamar a aplicação seja praticamente imediata.

    Desde a versão do Framework 3.5 SP1 existem 3 opções para se criar um Splash Screen no WPF. Em todas elas devemos lembrar que as imagens deve ser suportadas pelo Windows Imaging Component (WIC) e isso inclui: BMP, GIF, JPEG, PNG e TIFF.

    Se você utilizar uma imagem PNG com transparência ela será mostrada no Splash Screen com transparência. Se utilizar um GIF animado só será mostrado o primeiro frame.

    Opção 1: Adicionando o item SplashScreen

    Com certeza esta é a opção mais simples.

    • No menu de contexto do seu projeto selecione a opção Add e depois New Item.
    • Selecione o item SplashScreen (WPF) e escolha um nome para o mesmo.
    • Rode a aplicação e veja como ficou a imagem padrão de Splash Screen.
    Opção 2: Utilizando uma imagem com Build Action SplashScreen

    A segunda opção não consiste em algo tão mais complexo do que o item SplashScreen, na verdade se utiliza o mesmo recurso utilizado por ele, uma imagem que tem definido seu Build Action como SplashScreen.

    • No menu de contexto do seu projeto selecione a opção Add e depois Existing Item.
    • Selecione uma imagem que queira que apareça enquanto a sua aplicação está fazendo o carregamento mais pesado.
    • Vá na aba das propriedades desta imagem e configure o Build Action para SplashScreen.
    • Rode a aplicação e veja como ficou a imagem selecionada como Splash Screen da sua aplicação.
    Opção 3:Utilizando as APIs de SplashScreen

    Podemos utilizar a API de SplashScreen através da classe de mesmo nome.

    Não existem passos mágicos a seguir, apenas devemos prestar atenção que a imagem que quisermos utilizar deve ter seu Build Action configurado para Resource.

    public partial class MainWindow : Window { public MainWindow() { var splash = new SplashScreen("Splash.png"); splash.Show(false); splash.Close(TimeSpan.FromSeconds(3)); InitializeComponent(); } }

    Como podemos ver, basta instanciar a classesplash SplashScreen passando o caminho do Resource.

    Depois chamamos o método Show para mostrar a imagem e informamos que a mesma não deverá ser fechada automaticamente.

    Por fim definimos através do método Close que após 3 segundos ela sofrerá um efeito fade out e fechará.

    O Splash Screen em si não faz a aplicação ficar mais rápida para abrir, mas como faz uso do Windows Imaging Component (WIC) ele mostra a imagem muito antes da aplicação carregar. Com isso melhora a experiência do usuário com a sua aplicação.

    Enjoy

    terça-feira, 1 de setembro de 2009

    Cadê as sobrecargas no Silverlight?

    Mais de um mês inteiro sem nenhuma postagem, estou com um pouco de falta de criatividade. Aliado a isto tive um problema de saúde que me deixou durante uma semana bastante preocupado, mas já me sinto melhor. Andei estudando Silverlight e WPF, inclusive estou participando de um projeto com ambas as tecnologias e posso dizer com certeza que a curva de aprendizado não é tão grande entre as duas. Uma das dificuldades que estou sentindo na programação em Silverlight é a falta de algumas (várias) sobrecargas de métodos. Isso não chega a ser um problema, mas incomoda quando se tenta utilizar um código antigo numa aplicação Silverlight. Vou colocar dois códigos bem simples, que provavelmente você já deva ter usado:
    public bool IsConvertible(Type type)
    {
        return type.GetInterface("IConvertible") != null;
    }
    public T ConvertEnum<T>(object src)
    {
        Type type = typeof(T);
        return (T)Enum.Parse(type, src.ToString());
    }
    Pois bem, apesar de bem simples os dois métodos acima não funcionam exatamente como estão. Isso porque exatamente a sobrecarga utilizada não existe em Silverlght. Obviamente que se passarmos outro parâmetro a acessarmos a outra sobrecarga podemos ver que o Silverlight possui apenas uma forma de acesso, conforme abaixo.
    public bool IsConvertible(Type type)
    {
        return type.GetInterface("IConvertible", false) != null;
    }
    public T ConvertEnum<T>(object src)
    {
        Type type = typeof(T);
        return (T)Enum.Parse(type, src.ToString(), false);
    }
    A lista de diferenças e bastante grande, inclui também coisas que se costuma usar com muita frequência até em WPF como é o caso do DependencyProperty.Register que também não tem nenhuma sobrecarga no Silverlight. É só com o dia a dia é que notaremos todas essas diferenças. Não pode-se culpar a equipe de deselvolvimento do Silverlight pois afinal de contas a diferença no tamanho do plugin para o framework .NET completo teria que estar em algum lugar. Mágica não existe. Enjoy

    quinta-feira, 21 de maio de 2009

    O que há de novo no .NET Framework 4

    Não gosto muito de publicar posts apenas com link para outro lugar mas este com certeza mereceu. É a página do What's New in the .NET Framework 4. Nela podemos encotrar um resumo de tudo que está por vir junto com o Visual Studio 2010, como Tuples, DLR, e muito mais. Para conferir basta acessar What's New in the .NET Framework 4. Separei alguns tópicos para quem tem interesse em alguma área específica: Enjoy

    quinta-feira, 20 de novembro de 2008

    Programa de Capacitação em WPF

    Recebi hoje a grande notícia de que fui selecionado para participar do Programa de Capacitação em WPF que será realizado no Centro de Inovação na PUCRS entre os dias de 25/11 a 28/11. Acredito que isto possa me alavancar de vez na cultura de programação rica de aplicativos aumentando meu conhecimento, que ainda é pequeno, em WPF e Silverlight. Aproveitando a oportunidade, publiquei um novo exemplo que fiz em Silverlight 2. Todos os anteriores, junto a este, podem ser conferidos em www.vitorcanova.net/Silverlight.

    segunda-feira, 17 de novembro de 2008

    Voltando em grande estilo

    Sei que passei um bom tempo sem postar. Fiquei um pouco atarefado após o casamento e a troca de emprego. Trabalhando direto com desenvolvimento em várias outras coisas surgindo ao mesmo tempo quase não parei para me dedidar ao meu blog. Mas isso não quer diser que fiquei parado no tempo. Nesse período tenho estudado sobre as novas e não tão novas tecnologias da Microsoft. Tenho usado Linq to Object com frequencia, Linq to XML também já passou pelas minhas mãos mas no momento o que mais está me fascinado é o Silverlight 2. Tenho estudado a algum tempo um pouco sobre ele e WPF, mais precisamente desde o lançamento do Release do Beta 2. Agora com o lançamento do RTW vi que era necessário entrar de vez nessa onda antes que ela passe eu eu tenha que correr atrás. Já tenho alguns exemplos de Silverlight 2 publicados no meu site e em breve pretendo disponibilizar mais junto com alguns tutoriais que pretendo colocar aqui mesmo. Até a próxima.