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
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 );
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">
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).
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;
}
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">
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