73

リソースとして埋め込まれた .ico ファイルがあります (ビルド アクションがリソースに設定されています)。NotifyIcon を作成しようとしています。自分のアイコンを参照するにはどうすればよいですか?

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

5 に答える 5

114

アイコン ファイルをプロジェクト アセンブリの 1 つに追加し、その [ビルド アクション] を [リソース] に設定する必要があります。アセンブリへの参照を追加した後、次のように 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 );
于 2008-09-16T17:13:28.477 に答える
21

一般的な使用パターンは、通知アイコンをメイン ウィンドウのアイコンと同じにすることです。アイコンは 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">
于 2009-12-09T00:20:41.390 に答える
14

resx スタイルのリソースを使用したくない場合は、プロジェクトの ico ファイルをフォルダー ("ArtWork" としましょう) に貼り付け、プロパティでビルド アクションを "Resources" に設定します ...

次に、PACK URI を使用して XAML で参照できます... "pack://application:,,,/Artwork/Notify.ico"

ここを参照してください: http://msdn.microsoft.com/en-us/library/aa970069.aspxサンプル

もう少し... WPFのようになりたい場合は、XAMLで作成でき、標準のWPFメニューを使用するNotifyIconコントロールを持つCodePlexのWPF Contribプロジェクトを調べる必要があります(したがって、「何でも貼り付けることができます」 " メニューにあります)。

于 2008-09-16T17:14:05.277 に答える
2

ここでプロジェクトを作成し、埋め込みリソースを使用しました (ビルド アクションは単なるリソースではなく埋め込みリソースに設定されました)。このソリューションは Resource では機能しませんが、操作できる場合があります。これを 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;
    }
于 2008-09-16T17:52:44.980 に答える