2008-09-16 6 views
57

मेरे पास एक .ico फ़ाइल है जो संसाधन के रूप में एम्बेडेड है (संसाधन पर कार्रवाई सेट करें)। मैं एक NotifyIcon बनाने की कोशिश कर रहा हूँ। मैं अपने आइकन का संदर्भ कैसे दे सकता हूं?मैं ऐसे आइकन का उपयोग कैसे करूं जो WPF में संसाधन है?

notifyIcon = new NotifyIcon(); 
notifyIcon.Icon = ??  // my icon file is called MyIcon.ico and is embedded 
+0

यहाँ समान प्रश्न देखें: [कड़ी यहाँ विवरण दर्ज] [1] [1]: http://stackoverflow.com/questions/1127647/convert-system-drawing- आइकन-टू-सिस्टम-मीडिया-इमेजर्स – PatTheFrog

उत्तर

88

आपका आइकन फ़ाइल अपनी परियोजना विधानसभाओं और उसके कार्रवाई बिल्ड में से एक संसाधन के लिए सेट किया जाना चाहिए करने के लिए जोड़ा जाना चाहिए।

System.Windows.Forms.NotifyIcon icon = new System.Windows.Forms.NotifyIcon(); 
Stream iconStream = Application.GetResourceStream(new Uri("pack://application:,,,/YourReferencedAssembly;component/YourPossibleSubFolder/YourResourceFile.ico")).Stream; 
icon.Icon = new System.Drawing.Icon(iconStream); 
+11

आइकन बनने के बाद आइकनस्ट्रीम का निपटान करना न भूलें। – devios1

+0

इस उदाहरण के लिए धन्यवाद, मुझे अंततः मेरे आवेदन की एक संदर्भित असेंबली में संसाधन प्राप्त करने का तरीका मिला: नया उरी ("पैक: // एप्लिकेशन: ,,/आपका संदर्भित एस्सेप्लर; घटक/आपका संभावित SubFolder/YourResourceFile.ico") –

+0

क्या यह आइकन को कई संकल्प होने की अनुमति दें? – tofutim

9

ठीक है, आप resx शैली संसाधनों का उपयोग नहीं करना चाहते हैं: विधानसभा के लिए एक संदर्भ जोड़ने के बाद, आप इस प्रकार का NotifyIcon बना सकते हैं तो आप सिर्फ एक फ़ोल्डर में अपनी परियोजना में ico फ़ाइल छड़ी (आइए "आर्टवर्क" कहें) और गुणों में, बिल्ड एक्शन को "संसाधन" पर सेट करें ...

फिर आप इसे पैक यूआरआई का उपयोग कर एक्सएएमएल में संदर्भित कर सकते हैं ... "पैक: // आवेदन: ,,,/कलाकृति/Notify.ico "

यहाँ देखें: http://msdn.microsoft.com/en-us/library/aa970069.aspx और sample

यदि आप थोड़ा और बनना चाहते हैं ... डब्ल्यूपीएफ-जैसी, आपको कोडेप्लेक्स पर WPF Contrib प्रोजेक्ट में देखना चाहिए जिसमें एक नोटिफ़िकॉन नियंत्रण है जिसे आप एक्सएएमएल में बना सकते हैं और जो मानक डब्ल्यूपीएफ मेन्यू का उपयोग करता है (ताकि आप कुछ भी छड़ी कर सकें "मेनू में)।

1

मैंने यहां एक प्रोजेक्ट बनाया है और एक एम्बेडेड संसाधन का उपयोग किया है (बिल्ड एक्शन केवल संसाधन के बजाय एंबेडेड संसाधन पर सेट किया गया था)। यह समाधान संसाधन के साथ काम नहीं करता है, लेकिन आप इसे कुशल बनाने में सक्षम हो सकते हैं। मैंने इसे ऑनइन्टियालाइज्ड() पर रखा लेकिन इसे वहां जाना नहीं है।

//IconTest = namespace; exclamic.ico = resource 
System.IO.Stream stream = this.GetType().Assembly.GetManifestResourceStream("IconTest.Resources.exclamic.ico"); 

    if (stream != null) 
    { 
     //Decode the icon from the stream and set the first frame to the BitmapSource 
     BitmapDecoder decoder = IconBitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.None); 
     BitmapSource source = decoder.Frames[0]; 

     //set the source of your image 
     image.Source = source; 
    } 
+1

बस एक एफवाईआई - मैंने अपने एमएस डब्ल्यूपीएफ एमसीटीएस प्रशिक्षण किट में एंबेडेड संसाधनों का उपयोग न करने के लिए पढ़ा क्योंकि यह एक अलग संसाधन प्रबंधन योजना का उपयोग करता है जो WPF से कम पहुंच योग्य है। सुनिश्चित नहीं है कि इसका क्या अर्थ है, लेकिन – ScottG

+0

@ एससीओटीजी के साथ बस गुजरना यूआरआई का उपयोग नहीं कर सकता है अगर आप मुख्य विंडो बनने से पहले संसाधन लोड करना चाहते हैं।इसलिए आपको आइकन को एम्बेड करने और BlackSphere द्वारा वर्णित लोड करने की आवश्यकता है। मेरे मामले में, मुझे अपने ट्रे एप्लिकेशन के लिए मेरे एप्लिकेशन कॉन्टेक्स्ट में आइकन लोड करना होगा। –

19

एक आम उपयोग पैटर्न को सूचित आइकन मुख्य विंडो के आइकन के रूप में ही है। आइकन को पीएनजी फ़ाइल के रूप में परिभाषित किया गया है।

ऐसा करने के लिए परियोजना के संसाधनों में चित्र जोड़ी और उसके बाद का उपयोग इस प्रकार है:

var iconHandle = MyNamespace.Properties.Resources.MyImage.GetHicon(); 
this.notifyIcon.Icon = System.Drawing.Icon.FromHandle(iconHandle); 

खिड़की XAML में:

<Window x:Class="MyNamespace.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:local="clr-namespace:Seahorse" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Height="600" 
Icon="images\MyImage.png"> 
+2

ध्यान दें कि आपको संसाधन डिजाइनर का उपयोग करके आइकन जोड़ना चाहिए और उसके बाद निर्माण के लिए संसाधन को बिल्ड करने के लिए सेट करना चाहिए। –

0

तुम सिर्फ सरल जवाब के लिए देख रहे हैं, मुझे लगता है कि यह वह जगह है जहां MyApp आपका एप्लिकेशन नाम है और जहां यह आपके एप्लिकेशन के लिए रूट नेमस्पेस नाम है। आपको पैक यूआरआई सिंटैक्स का उपयोग करना होगा, लेकिन यह आपके एम्बेडेड संसाधनों से आइकन खींचने के लिए जटिल नहीं होना चाहिए।

<Window x:Class="MyApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    Height="100" 
    Width="200" 
    Icon="pack://application:,,,/MyApp;component/Resources/small_icon.ico"> 
संबंधित मुद्दे