문제

리소스로 포함된 .ico 파일이 있습니다(리소스로 설정된 빌드 작업).NotifyIcon을 생성하려고 합니다.내 아이콘을 어떻게 참조할 수 있나요?

notifyIcon = new NotifyIcon();
notifyIcon.Icon = ??     // my icon file is called MyIcon.ico and is embedded
도움이 되었습니까?

해결책

아이콘 파일은 프로젝트 어셈블리 중 하나에 추가되어야 하며 해당 빌드 작업은 리소스로 설정되어야 합니다.어셈블리에 대한 참조를 추가한 후 다음과 같이 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"로 설정하기만 하면 됩니다.

그런 다음 PACK URI를 사용하여 XAML에서 참조할 수 있습니다."팩://application:,,,/Artwork/Notify.ico"

여기를 보아라: http://msdn.microsoft.com/en-us/library/aa970069.aspx 그리고 견본

조금 더 있고 싶다면 ...WPF와 마찬가지로 WPF 기여 XAML에서 만들 수 있고 표준 WPF 메뉴를 사용하는 NotifyIcon 컨트롤이 있는 CodePlex의 프로젝트입니다. 따라서 메뉴에 "무엇이든" 붙일 수 있습니다.

간단한 답을 찾고 있다면 여기가 MyApp이 애플리케이션 이름이고 애플리케이션의 루트 네임스페이스 이름이 있는 곳이라고 생각합니다.Pack 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">

여기서 프로젝트를 생성하고 포함된 리소스를 사용했습니다(빌드 작업은 리소스가 아닌 포함된 리소스로 설정되었습니다).이 솔루션은 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;
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top