Как использовать значок, который является ресурсом в WPF?
У меня есть .ICO-файл, внедренный в качестве ресурса (действие при построении значение ресурса). Я пытаюсь создать NotifyIcon. Как я могу ссылаться на свой значок?
notifyIcon = new NotifyIcon();
notifyIcon.Icon = ?? // my icon file is called MyIcon.ico and is embedded
5 ответов:
ваш файл значков должен быть добавлен в одну из сборок проекта, а его действие сборки должно быть установлено в Resource. После добавления ссылки на сборку можно создать NotifyIcon следующим образом:
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 );
общий принцип-иметь значок уведомления такой же, как значок главного окна. Значок определяется как PNG-файл.
для этого добавьте изображение в ресурсы проекта и используйте его следующим образом:
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">
Ну, вы не хотите использовать ресурсы стиля resx: вы просто вставляете файл ico в свой проект в папку (скажем, "ArtWork") и в свойствах устанавливаете действие сборки в "Resources" ...
затем вы можете ссылаться на него в XAML с помощью пакета URI... "упаковка://приложение:,,,/искусства/уведомления.ico"
смотрите здесь:http://msdn.microsoft.com/en-us/library/aa970069.aspx и пример
Если вы хотите быть немного больше... WPF-как, вы должны смотреть в WPF Contrib проект на CodePlex, который имеет элемент управления NotifyIcon, который вы можете создать в XAML и который использует стандартные меню WPF (так что вы можете вставить "что-нибудь" в меню).
Я создал проект здесь и использовал встроенный ресурс (действие сборки было установлено на встроенный ресурс, а не просто ресурс). Это решение не работает с ресурсом, но вы можете управлять им. Я поставил это на OnIntialized (), но он не должен идти туда.
//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; }
Если вы просто ищете простой ответ, я думаю, что это то, где MyApp-это ваше имя приложения и где это имя корневого пространства имен для вашего приложения. Вы должны использовать синтаксис URI пакета, но это не должно быть так сложно, чтобы вытащить значок из ваших встроенных ресурсов.
<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">
Comments