it-swarm-id.com

Bagaimana cara menggunakan ikon yang merupakan sumber daya di WPF?

Saya memiliki file .ico yang disematkan sebagai sumber daya (build action set to resource). Saya mencoba membuat NotifyIcon. Bagaimana saya bisa merujuk ikon saya?

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

File ikon Anda harus ditambahkan ke salah satu majelis proyek Anda dan Build Action-nya harus diatur ke Resource. Setelah menambahkan referensi ke Majelis, Anda dapat membuat NotifyIcon seperti ini:

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

Pola penggunaan umum adalah memiliki ikon pemberitahuan sama dengan ikon jendela utama. Ikon didefinisikan sebagai file PNG.

Untuk melakukan ini, tambahkan gambar ke sumber daya proyek dan kemudian gunakan sebagai berikut:

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

Di jendela 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">
20
Thomas Bratt

Nah, Anda tidak ingin menggunakan sumber daya gaya resx: Anda hanya menempelkan file ico di proyek Anda dalam folder (katakanlah "ArtWork") dan di properti, atur Build Action ke "Resources" ...

Kemudian Anda dapat merujuknya di XAML menggunakan PACK URI ... "pack: // application: ,/Artwork/Notify.ico"

Lihat di sini: http://msdn.Microsoft.com/en-us/library/aa970069.aspx dan sampel

Jika Anda ingin menjadi sedikit lebih ... seperti WPF, Anda harus melihat proyek WPF Contrib pada CodePlex yang memiliki kontrol NotifyIcon yang dapat Anda buat dalam XAML dan yang menggunakan menu WPF standar (sehingga Anda dapat menempel "apa saja" di menu).

12
Jaykul

Jika Anda hanya mencari jawaban sederhana, saya pikir ini adalah di mana MyApp adalah nama aplikasi Anda dan di situlah nama namespace root untuk aplikasi Anda. Anda harus menggunakan sintaks paket URI, tetapi tidak harus rumit untuk mengeluarkan ikon dari sumber daya yang disematkan.

    <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">
2
Mike Sage

Saya membuat proyek di sini dan menggunakan sumber daya yang disematkan (tindakan build ditetapkan ke Sumber Daya Tertanam, bukan hanya sumber daya). Solusi ini tidak berfungsi dengan Sumber Daya, tetapi Anda mungkin dapat memanipulasinya. Saya meletakkan ini di OnIntialized () tetapi tidak harus pergi ke sana.

//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
blackSphere