Yalnızca tepsi simgesi olan WPF Uygulaması


144

Ben tam bir WPF acemi ve merak bana kimse tepsiye küçültülmüş bir uygulama yazmak için nasıl bazı işaret verebilir verebilir. Fikir, periyodik olarak bir RSS Feed'i getirmesi ve yeni feed'ler olduğunda bir Toaster Popup oluşturmasıdır.

Uygulama hala bir Ana Pencereye sahip olmalıdır (esasen sadece tüm feed girişlerini içeren bir liste), ancak bu varsayılan olarak gizlenmelidir.

XAML ve WPF hakkında okumaya başladım ve App.xaml'deki StartupUri'nin ana pencereme işaret etmesi gerektiğini biliyorum, ancak SysTray simgesini yapmak ve ana pencereyi gizlemek için doğru yolun ne olduğu hakkında hiçbir fikrim yok (bu da kullanıcı pencereyi simge durumuna küçültüldüğünde görev çubuğunu değil tepsiyi simge durumuna küçültmelidir).

İpucu var mı?


3
Tüm öneriler için teşekkürler! WPF-NotifyIcon, hızlı bir testin oldukça umut verici ve ağrısız olduğunu gösterdiğinden, gideceğim şey.
Michael Stum

Yanıtlar:


114

WPF için NotifyIcon yoktur.

Bir meslektaşım, serbestçe bulunan bu kütüphaneyi iyi bir etki için kullandı:


2
Fantastik kütüphane. Kullanmak için sabırsızlanıyorum!
Rob Hay

2
Drew, bağlantının burada öldüğü anlaşılıyor. Bu kütüphane için alternatif bir bağlantınız var mı? Hızlı bir arama yaptım, ancak sonuçların aynı proje için olup olmadığını belirleyemedim.
Brad Larson

@BradLarson, site kapalı gibi görünüyor; ancak yine de proje Nuget paketi olarak kullanılabilir (Dale'in cevabına bakınız)
Thomas Levesque

4
Çok sayıda oy olmasına rağmen, bu cevap faydalı, meşru bir Yığın Taşması yanıtı oluşturmaz. Yığın Taşması standartlarının aksine etkili bir şekilde sadece bağlantıya verilen bir yanıttır. Lütfen cevabın kendisinde belirli, önemli bilgileri sağlayarak bu cevabı geliştirin. Bu, harici sitenin durumuna bakılmaksızın bilgilerin mevcut olmasını sağlayacaktır.
Evan Larsen

107

System.Windows.Forms'daki NotifyIcon denetimini kullanmanız veya alternatif olarak Windows API tarafından sağlanan Notify Icon API'sını kullanabilirsiniz. WPF böyle bir eşdeğer sağlamaz ve Microsoft Connect'te birkaç kez istendi.

GitHub'da System.Windows.Formsbir WPF uygulamasından NotifyIcon Bileşeni kullanan bir kodum var, kod https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs adresinde görüntülenebilir

Özet bitleri şunlardır:

ShowInTaskbar = False olan ve Görünmez Durumda yüklenen bir WPF Penceresi oluşturun.

Sınıf düzeyinde:

private System.Windows.Forms.NotifyIcon notifyIcon = null;

OnInitialize () sırasında:

notifyIcon = new System.Windows.Forms.NotifyIcon();
notifyIcon.Click += new EventHandler(notifyIcon_Click);
notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);
notifyIcon.Icon = IconHandles["QuickLaunch"];

OnLoaded () sırasında:

notifyIcon.Visible = true;

Etkileşim için (notifyIcon.Click ve DoubleClick olarak gösterilir):

void notifyIcon_Click(object sender, EventArgs e)
{
    ShowQuickLaunchMenu();
}

Buradan, bağlam menüleri, açılır pencereler vb. Gibi WPF Denetimleri ve API'larını kullanmaya devam edebilirsiniz.

Bu kadar basit. Bileşene ev sahipliği yapmak için tam olarak bir WPF Penceresine ihtiyacınız yoktur, bir WPF Uygulamasına tanıtmak için en uygun yoldur (bir Pencere genellikle App.xaml ile tanımlanan varsayılan giriş noktasıdır), aynı şekilde t WPF Wrapper veya 3. taraf denetimine gerek yoktur, çünkü SWF bileşeni, .NET Framework'ün bir parçası olduğundan (mevcut ve gelecekteki tüm .NET Framework sürümlerinin üzerine kurulduğu) WPF desteğine sahip olan herhangi bir .NET Framework kurulumunda garanti edilmektedir. Bugüne kadar, Microsoft'tan SWF desteğinin yakın zamanda .NET Framework'ten kaldırılacağına dair bir gösterge yoktur.

Umarım yardımcı olur.

Bir tepsi simgesi elde etmek için 3.0 öncesi bir Çerçeve Bileşeni kullanmanız gereken küçük bir peynirdir, ancak anlaşılır bir şekilde Microsoft'un açıkladığı gibi, WPF kapsamında bir Sistem Tepsisi kavramı yoktur. WPF bir sunum teknolojisidir ve Bildirim Simgeleri bir İşletim Sistemi ("Sunum" değil) konseptidir.


2
Detaylı açıklama için teşekkürler!
Michael Stum

4
+1, bu sadece açıklama için seçilen cevap olmalıdır.
ToastyMallows

2
Son paragraf için şeref. Tam olarak bilmem gereken şey buydu ve iyi bir geliştiricinin şapırtılı bu basit, anlaşılır ayrıntı seviyesi.
Matthew Layton

1
Bu son paragrafla ilgili komik kısım "WPF sadece Windows'tur", Microsoft'un .NET Core'da WPF çapraz platform oluşturmaması için mazereti. Yani sadece Windows, ancak Windows'a özgü özellikleri ortaya çıkarmak için sadece Windows değil mi?
McGuireV10

1
WPF Uygulamamdaki System.Windows.Forms referanslarından hoşlanmayan tek kişi ben miyim?
Joel

48

Son zamanlarda aynı problemi yaşadım. Ne yazık ki, NotifyIcon şu anda sadece bir Windows.Forms kontrolüdür, kullanmak istiyorsanız, çerçevenin o kısmını dahil etmeniz gerekecektir. Sanırım WPF saflığının ne kadar olduğuna bağlı.

Başlamak için hızlı ve kolay bir yol istiyorsanız , WinForms NotifyIcon'a hiç güvenmeyen Kod Projesi üzerindeki bu WPF NotifyIcon denetimine bakın . Daha yeni bir sürüm yazarın web sitesinde ve bir NuGet paketi olarak mevcut görünmektedir . Bu benim için şimdiye kadarki en iyi ve en temiz yol gibi görünüyor.

  • Metin yerine Zengin Araç İpuçları
  • WPF bağlam menüleri ve pop-up'ları
  • Komut desteği ve yönlendirilmiş olaylar
  • Esnek veri bağlama
  • İşletim sistemi tarafından sağlanan varsayılan mesajlar yerine zengin balon mesajları

Bunu kontrol et. İnanılmaz bir örnek uygulaması ile birlikte geliyor, kullanımı çok kolay ve harika görünümlü Windows Live Messenger tarzı WPF açılır pencereleri, araç ipuçları ve bağlam menüleri olabilir. Bir RSS beslemesini görüntülemek için mükemmel, benzer bir amaçla kullanıyorum.


5
2017'deki yeni gelenler için, bu nuget paketi eski ama nuget.org/packages/Hardcodet.NotifyIcon.Wpf
mcy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.