Jestem całkowitym nowicjuszem WPF i zastanawiam się, czy ktoś mógłby mi dać kilka wskazówek, jak napisać aplikację, która zaczyna się zminimalizować do zasobnika. Pomysł polega na tym, że okresowo pobiera źródło RSS i tworzy wyskakujące okienko tostera, gdy pojawiają się nowe źródła.
Aplikacja powinna nadal mieć okno główne (zasadniczo tylko listę zawierającą wszystkie wpisy kanału), ale powinno ono być domyślnie ukryte.
Zacząłem czytać o XAML i WPF i wiem, że StartupUri w App.xaml musi wskazywać na moje główne okno, ale nie mam pojęcia, jak należy zrobić ikonę SysTray i ukryć okno główne (to też oznacza, że gdy użytkownik minimalizuje okno, powinno ono minimalizować się do zasobnika, a nie do paska zadań).
Jakieś wskazówki?
Odpowiedzi:
Nie ma NotifyIcon dla WPF.
Mój kolega korzystał z tej ogólnodostępnej biblioteki z dobrym skutkiem:
źródło
Musisz użyć kontrolki NotifyIcon z System.Windows.Forms lub alternatywnie możesz użyć interfejsu Notify Icon API dostarczanego przez Windows API. WPF nie zapewnia takiego odpowiednika i został kilkakrotnie zażądany w witrynie Microsoft Connect.
Mam kod na GitHub, który używa
System.Windows.Forms
komponentu NotifyIcon z poziomu aplikacji WPF, kod można obejrzeć na https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.csOto podsumowanie:
Utwórz okno WPF z ShowInTaskbar = False, które jest ładowane w niewidocznym stanie.
Na poziomie klasy:
Podczas OnInitialize ():
Podczas OnLoaded ():
A do interakcji (pokazane powyżej jako notifyIcon.Click i DoubleClick):
Z tego miejsca możesz wznowić korzystanie z kontrolek WPF i interfejsów API, takich jak menu kontekstowe, wyskakujące okienka itp.
To takie proste. Nie potrzebujesz dokładnie okna WPF do hostowania komponentu, jest to po prostu najwygodniejszy sposób wprowadzenia go do aplikacji WPF (ponieważ okno jest ogólnie domyślnym punktem wejścia zdefiniowanym przez App.xaml), podobnie nie robisz tego. Potrzebujesz opakowania WPF lub formantu innej firmy, ponieważ komponent SWF jest obecny w każdej instalacji .NET Framework, która również obsługuje WPF, ponieważ jest częścią .NET Framework (na której opierają się wszystkie obecne i przyszłe wersje .NET Framework). Do chwili obecnej Microsoft nic nie wskazuje na to, że obsługa SWF zostanie wkrótce usunięta z .NET Framework.
Mam nadzieję, że to pomoże.
To trochę serdeczne, że musisz użyć komponentu Framework starszego niż 3.0, aby uzyskać ikonę w zasobniku, ale zrozumiałe, jak wyjaśnił to Microsoft, nie ma koncepcji zasobnika systemowego w zakresie WPF. WPF to technologia prezentacji, a ikony powiadomień to koncepcja systemu operacyjnego (nie „prezentacji”).
źródło
Niedawno miałem ten sam problem. Niestety NotifyIcon jest obecnie tylko kontrolką Windows.Forms, jeśli chcesz z niej skorzystać, będziesz musiał uwzględnić tę część frameworka. Myślę, że to zależy od tego, jak bardzo jesteś purystą WPF.
Jeśli chcesz szybkiego i łatwego sposobu rozpoczęcia pracy, zapoznaj się z tym formantem WPF NotifyIcon w projekcie Code, który w ogóle nie opiera się na NotifyIcon WinForms. Wydaje się, że nowsza wersja jest dostępna w witrynie internetowej autora i jako pakiet NuGet . Jak dotąd wydaje mi się, że jest to najlepsza i najczystsza droga.
Sprawdź to. Zawiera również niesamowitą przykładową aplikację, bardzo łatwą w użyciu, i możesz mieć świetnie wyglądające wyskakujące okienka WPF, podpowiedzi i menu kontekstowe w stylu Windows Live Messenger. Idealny do wyświetlania kanału RSS, używam go w podobnym celu.
źródło