WPF अनुप्रयोग है कि केवल एक ट्रे आइकन है


144

मैं कुल WPF नौसिखिया हूं और आश्चर्य है कि अगर कोई मुझे कुछ संकेत दे सकता है कि कैसे एक आवेदन लिखना है जो ट्रे में कम से कम शुरू होता है। यह विचार है कि यह समय-समय पर RSS फ़ीड प्राप्त करता है और नए फ़ीड होने पर टोस्टर-पॉपअप बनाता है।

एप्लिकेशन में अभी भी एक मुख्य विंडो होनी चाहिए (अनिवार्य रूप से केवल एक सूची जिसमें सभी फ़ीड प्रविष्टियां हैं), लेकिन इसे डिफ़ॉल्ट रूप से छिपाया जाना चाहिए।

मैंने XAML और WPF के बारे में पढ़ना शुरू कर दिया है और मुझे पता है कि App.xaml में StartupUri को मेरी मुख्य विंडो को इंगित करना है, लेकिन मुझे नहीं पता कि SysTray आइकन को करने और मुख्य विंडो को छिपाने का उचित तरीका क्या है (यह भी) इसका मतलब है कि जब उपयोगकर्ता विंडो को कम करता है, तो उसे ट्रे पर कम से कम करना चाहिए, टास्कबार को नहीं)।

कोई संकेत?


3
सभी सुझावों के लिए शुक्रिया! WPF-NotifyIcon वही है, जिसके साथ मैं जाऊंगा, एक त्वरित परीक्षण से पता चलता है कि यह काफी आशाजनक और दर्द रहित है।
माइकल Stum

जवाबों:


114

WPF के लिए कोई NotifyIcon नहीं है।

मेरे एक सहकर्मी ने अच्छे प्रभाव के लिए इस स्वतंत्र रूप से उपलब्ध पुस्तकालय का उपयोग किया:


2
शानदार पुस्तकालय। खिचड़ी भाषा का उपयोग करने के लिए इंतजार!
रोब हाय

2
आकर्षित, लिंक यहाँ मृत हो गया है प्रतीत होता है। क्या आपके पास इस लाइब्रेरी के लिए कोई वैकल्पिक लिंक है? मैंने एक त्वरित खोज की, लेकिन यह निर्धारित नहीं कर सका कि क्या परिणाम उसी परियोजना के लिए थे।
ब्रैड लार्सन

@ ब्रैडलर्सन, साइट नीचे लगती है; लेकिन वैसे भी परियोजना नुगेट पैकेज के रूप में उपलब्ध है (डेल का जवाब देखें)
थॉमस लेवेस्क

4
बड़ी संख्या में वोटों के बावजूद, यह उत्तर एक उपयोगी, वैध स्टैक ओवरफ्लो उत्तर का गठन नहीं करता है। यह प्रभावी रूप से लिंक-ओनली उत्तर है, जो स्टैक ओवरफ्लो मानकों के विपरीत है। कृपया उत्तर में विशिष्ट, भौतिक जानकारी प्रदान करके इस उत्तर को सुधारें। यह सुनिश्चित करेगा कि बाहरी साइट की स्थिति की परवाह किए बिना जानकारी उपलब्ध है।
इवान लार्सन

107

आपको System.Windows.Forms से NotifyIcon नियंत्रण का उपयोग करना होगा, या वैकल्पिक रूप से आप Windows API द्वारा प्रदान की गई Notify Icon API का उपयोग कर सकते हैं। WPF ऐसा कोई समकक्ष प्रदान नहीं करता है, और इसे कई बार Microsoft Connect पर अनुरोध किया गया है।

मेरे पास GitHub पर कोड है जो System.Windows.Formsएक WPF एप्लिकेशन के भीतर से NotifyIcon Component का उपयोग करता है , कोड को https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuubLaunch/AppWindow.xaml.cs पर देखा जा सकता है।

यहाँ सारांश बिट्स हैं:

ShowInTaskbar = गलत के साथ एक WPF विंडो बनाएँ, और जो एक गैर-दृश्यमान स्थिति में लोड की गई है।

कक्षा-स्तर पर:

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

OnInitialize () के दौरान:

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

OnLoaded के दौरान ():

notifyIcon.Visible = true;

और बातचीत के लिए (जैसा कि InformIcon.Click और ऊपर डबल क्लिक करें):

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

यहां से आप WPF कंट्रोल और एपीआई जैसे संदर्भ मेनू, पॉप-अप विंडो आदि का उपयोग फिर से शुरू कर सकते हैं।

यह इत्ना आसान है। घटक की मेजबानी के लिए आपको वास्तव में WPF विंडो की आवश्यकता नहीं है, यह एक WPF ऐप में एक परिचय करने का सबसे सुविधाजनक तरीका है (जैसा कि विंडो आमतौर पर App.xaml के माध्यम से परिभाषित डिफ़ॉल्ट प्रविष्टि बिंदु है), इसी तरह, आप डॉन ' WPF रैपर या तीसरे पक्ष के नियंत्रण की आवश्यकता नहीं है, क्योंकि SWF घटक किसी भी .NET फ्रेमवर्क इंस्टालेशन में मौजूद है, जिसकी .NET फ्रेमवर्क का हिस्सा होने के बाद भी WPF का समर्थन है (जो कि सभी वर्तमान और भविष्य में .NET फ्रेमवर्क संस्करण बनाते हैं।) आज तक, Microsoft से कोई संकेत नहीं है कि SWF समर्थन को जल्द ही .NET फ्रेमवर्क से हटा दिया जाएगा।

उम्मीद है की वो मदद करदे।

यह एक छोटा पनीर है जिसे ट्रे-आइकॉन पाने के लिए आपको प्री-3.0 फ्रेमवर्क कंपोनेंट का उपयोग करना होगा, लेकिन समझदारी से जैसा कि माइक्रोसॉफ्ट ने समझाया है, WPF के दायरे में सिस्टम ट्रे की कोई अवधारणा नहीं है। डब्ल्यूपीएफ एक प्रस्तुति प्रौद्योगिकी है, और अधिसूचना चिह्न एक ऑपरेटिंग सिस्टम (एक "प्रस्तुति" नहीं) अवधारणा है।


2
विस्तृत विवरण के लिए धन्यवाद!
माइकल Stum

4
+1, यह केवल स्पष्टीकरण के लिए चयनित उत्तर होना चाहिए।
toastyMallows

2
उस अंतिम पैराग्राफ के लिए यश। यह वही था जो मुझे जानने की जरूरत थी, और यह एक सरल, सुखद विस्तार का यह स्तर है जो एक अच्छे डेवलपर की स्मोक करता है।
मैथ्यू लेटन

1
उस अंतिम पैराग्राफ के बारे में मजेदार हिस्सा "WPF केवल Windows है" अब .NET कोर के लिए WPF क्रॉस-प्लेटफॉर्म नहीं बनाने के लिए माइक्रोसॉफ्ट का बहाना है। तो यह विंडोज-केवल है, लेकिन विंडोज-विशिष्ट सुविधाओं को उजागर करने के लिए केवल विंडोज पर्याप्त नहीं है?
McGuireV10

1
मैं केवल वही हूं जो मेरे WPF ऐप में System.Windows.Forms के संदर्भों को नापसंद करता है?
जोएल

48

मुझे हाल ही में यही समस्या थी। दुर्भाग्य से, NotifyIcon इस समय केवल एक Windows.Forms नियंत्रण है, यदि आप इसका उपयोग करना चाहते हैं तो आपको फ्रेमवर्क के उस हिस्से को शामिल करना होगा। मुझे लगता है कि निर्भर करता है कि आप कितने WPF प्यूरिस्ट हैं।

यदि आप चाहते हैं कि कोड प्रोजेक्ट पर इस WPF NotifyIcon नियंत्रण की जाँच करें, जो WinForms NotifyIcon पर बिल्कुल भी निर्भर नहीं करता है, इसका एक त्वरित और आसान तरीका है । एक और हालिया संस्करण लेखक की वेबसाइट पर और NuGet पैकेज के रूप में उपलब्ध है । यह मेरे लिए अब तक का सबसे अच्छा और साफ तरीका है।

  • टेक्स्ट के बजाय रिच टूलटिप्स
  • WPF संदर्भ मेनू और पॉपअप
  • कमांड सपोर्ट और रूटेड इवेंट
  • लचीला डेटा बाइंडिंग
  • ओएस द्वारा डिफ़ॉल्ट संदेशों के बजाय रिच बैलून संदेश

इसकी जांच - पड़ताल करें। यह एक अद्भुत नमूना ऐप के साथ भी आता है, जिसका उपयोग करना बहुत आसान है, और आप विंडोज लाइव मैसेंजर शैली WPF पॉपअप, टूलटिप्स और संदर्भ मेनू देख सकते हैं। RSS फ़ीड प्रदर्शित करने के लिए बिल्कुल सही, मैं एक समान उद्देश्य के लिए इसका उपयोग कर रहा हूं।


5
2017 में नए लोगों के लिए, वह नगेट पैकेज अप्रचलित है जिसे अभी तक एक अलग नाम के तहत nuget.org/packages/Hardcodet.NotifyIcon.Wpf
mcy
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.