packs modernui metrowindow metroframework metro mahapps icon for wpf resources icons

modernui - metrowindow wpf



¿Cómo uso un ícono que es un recurso en WPF? (5)

Tengo un archivo .ico que está incrustado como recurso (acción de compilación configurada como recurso). Estoy tratando de crear un NotifyIcon. ¿Cómo puedo hacer referencia a mi ícono?

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


Bueno, no desea utilizar los recursos de estilo de resx: simplemente inserte el archivo ico en su proyecto en una carpeta (digamos "ArtWork") y en las propiedades, configure la Acción de compilación en "Recursos" ...

Luego puede hacer referencia a él en XAML usando PACK URI ... "paquete: // aplicación: ,,, / Artwork / Notify.ico"

Vea aquí: http://msdn.microsoft.com/en-us/library/aa970069.aspx y la sample

Si quieres ser un poco más ... como WPF, deberías ver el proyecto WPF Contrib en CodePlex que tiene un control NotifyIcon que puedes crear en XAML y que usa menús WPF estándar (para que puedas pegar "cualquier cosa") "en el menú).


Creé un proyecto aquí y usé un recurso incrustado (la acción de compilación se estableció en Recurso incrustado, en lugar de solo recurso). Esta solución no funciona con Resource, pero es posible que pueda manipularla. Puse esto en OnIntialized () pero no tiene que ir allí.

//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; }


Si solo busca la respuesta simple, creo que aquí es donde MyApp es el nombre de su aplicación y dónde está el nombre del espacio de nombres raíz para su aplicación. Debe usar la sintaxis de URI del paquete, pero no tiene por qué ser tan complicado sacar un ícono de sus recursos incrustados.

<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">


Su archivo de íconos se debe agregar a uno de los ensamblajes de su proyecto y su Acción de compilación debe configurarse como Recurso. Después de agregar una referencia al ensamblaje, puede crear un NotifyIcon como este:

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 );


Un patrón de uso común es hacer que el icono de notificación sea el mismo que el ícono de la ventana principal. El icono se define como un archivo PNG.

Para hacer esto, agregue la imagen a los recursos del proyecto y luego use de la siguiente manera:

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

En la ventana 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">