Eu sou um novato no WPF e me pergunto se alguém poderia me dar algumas dicas sobre como escrever um aplicativo que é minimizado na bandeja. A idéia é que ele busque periodicamente um RSS Feed e crie um Toaster-Popup quando houver novos feeds.
O aplicativo ainda deve ter uma janela principal (essencialmente apenas uma lista contendo todas as entradas de feed), mas que deve estar oculta por padrão.
Comecei a ler sobre XAML e WPF e sei que o StartupUri no App.xaml precisa apontar para minha janela principal, mas não tenho idéia de qual é a maneira correta de fazer o ícone do SysTray e ocultar a janela principal (isso também significa que, quando o usuário minimiza a janela, deve minimizar a bandeja, não a barra de tarefas).
Alguma dica?
Respostas:
Não há NotifyIcon para WPF.
Um colega meu usou esta biblioteca disponível gratuitamente com bons resultados:
fonte
Você precisa usar o controle NotifyIcon em System.Windows.Forms ou, em alternativa, pode usar a API de ícone do Notify fornecida pela API do Windows. O WPF não fornece esse equivalente e foi solicitado no Microsoft Connect várias vezes.
Eu tenho código no GitHub que usa o
System.Windows.Forms
Componente NotifyIcon de dentro de um aplicativo WPF, o código pode ser visualizado em https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.csAqui estão os bits de resumo:
Crie uma janela WPF com ShowInTaskbar = False e que seja carregado em um estado não visível.
No nível da classe:
Durante OnInitialize ():
Durante OnLoaded ():
E para interação (mostrada como notifyIcon.Click e DoubleClick acima):
A partir daqui, você pode retomar o uso de controles WPF e APIs, como menus de contexto, janelas pop-up etc.
É simples assim. Você não precisa exatamente de uma janela WPF para hospedar o componente, é apenas a maneira mais conveniente de introduzir uma em um aplicativo WPF (como uma janela geralmente é o ponto de entrada padrão definido pelo App.xaml), da mesma forma, você não precisa ' você precisa de um WPF Wrapper ou de controle de terceiros, pois o componente SWF é garantido presente em qualquer instalação do .NET Framework que também tenha suporte ao WPF, pois faz parte do .NET Framework (no qual todas as versões atuais e futuras do .NET Framework se baseiam.) Até o momento, não há indicação da Microsoft de que o suporte ao SWF seja retirado do .NET Framework tão cedo.
Espero que ajude.
É um pouco complicado você ter que usar um Componente do Framework anterior à 3.0 para obter um ícone de bandeja, mas, como a Microsoft explicou, não existe o conceito de Bandeja do Sistema no escopo do WPF. O WPF é uma tecnologia de apresentação e os ícones de notificação são um conceito de sistema operacional (não uma "apresentação").
fonte
Recentemente, tive esse mesmo problema. Infelizmente, o NotifyIcon é apenas um controle Windows.Forms no momento, se você quiser usá-lo, precisará incluir essa parte da estrutura. Eu acho que depende de quanto você é um purista do WPF.
Se você deseja uma maneira rápida e fácil de começar, confira este controle WPF NotifyIcon no Code Project, que não depende do WinForms NotifyIcon. Uma versão mais recente parece estar disponível no site do autor e como um pacote NuGet . Esta parece ser a melhor e mais limpa maneira para mim até agora.
Confira. Ele também vem com um aplicativo de amostra incrível, muito fácil de usar, e você pode ter pop-ups, dicas de ferramentas e menus de contexto WPF com ótima aparência do Windows Live Messenger. Perfeito para exibir um feed RSS, estou usando-o para uma finalidade semelhante.
fonte