Jak używać ikony, która jest zasobem w WPF?

Mam .plik ico osadzony jako zasób (build action set to resource). Próbuję utworzyć NotifyIcon. Jak mogę odwołać się do icon?

notifyIcon = new NotifyIcon();
notifyIcon.Icon = ??     // my icon file is called MyIcon.ico and is embedded
Author: Dave Clemmer, 2008-09-16

5 answers

Twój plik ikon powinien zostać dodany do jednego z zespołów projektu, a jego akcja budowania powinna być ustawiona na Resource. Po dodaniu referencji do złożenia można utworzyć NotifyIcon w następujący sposób:

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 );
 93
Author: user13125,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 17:23:42

Powszechnym wzorcem użycia jest posiadanie ikony powiadomień takiej samej jak ikona głównego okna. Ikona jest zdefiniowana jako plik PNG.

Aby to zrobić, dodaj obraz do zasobów projektu, a następnie użyj w następujący sposób:

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

W oknie 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">
 19
Author: Thomas Bratt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-09 00:20:41

Cóż, nie chcesz używać zasobów stylu resx: po prostu przyklejasz plik ico do swojego projektu w folderze (powiedzmy "Grafika") i we właściwościach Ustaw akcję budowania na "zasoby" ...

Następnie możesz odwołać się do niego w XAML używając Uri PACK ... "pack: / / application:,,, / Artwork / Notify.ico "

Zobacz tutaj: http://msdn.microsoft.com/en-us/library/aa970069.aspx i próbka

Jeśli chcesz być trochę więcej ... WPF-jak powinno wyglądać do projektu WPF Contrib na CodePlex, który ma kontrolkę NotifyIcon, którą można utworzyć w XAML i która wykorzystuje standardowe menu WPF (dzięki czemu można wpiąć "wszystko" w menu).

 11
Author: Jaykul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 17:23:38

Stworzyłem tutaj projekt i użyłem osadzonego zasobu(akcja build została ustawiona na zasób Wbudowany, a nie tylko zasób). To rozwiązanie nie działa z zasobem, ale możesz nim manipulować. Umieściłem to na OnIntialized (), ale nie musi tam iść.

//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
Author: blackSphere,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 17:52:44

Jeśli po prostu szukasz prostej odpowiedzi, myślę, że to jest to, gdzie MyApp jest nazwa aplikacji i gdzie jest to nazwa głównej przestrzeni nazw dla Twojej aplikacji. Musisz użyć składni Uri pakietu, ale wyciąganie ikony z osadzonych zasobów nie musi być tak skomplikowane.

    <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">
 0
Author: Mike Sage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-18 19:43:31