it-swarm-ko.tech

WPF에서 리소스 인 아이콘을 어떻게 사용합니까?

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

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

아이콘 파일은 프로젝트 어셈블리 중 하나에 추가되어야하며 빌드 조치는 자원으로 설정되어야합니다. 어셈블리에 대한 참조를 추가 한 후 다음과 같이 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 );
100
user13125

일반적인 사용 패턴은 알림 아이콘을 기본 창의 아이콘과 동일하게하는 것입니다. 아이콘은 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">
20
Thomas Bratt

Resx 스타일 리소스를 사용하고 싶지는 않습니다. 프로젝트의 ico 파일을 폴더 ( "ArtWork"라고 함)에 붙이고 속성에서 Build Action을 "Resources"로 설정하면됩니다.

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

여기를 참조하십시오 : http://msdn.Microsoft.com/en-us/library/aa970069.aspxsample

좀 더 ... WPF와 같이되고 싶다면 XAML에서 만들 수 있고 표준 WPF 메뉴를 사용하는 NotifyIcon 컨트롤이있는 CodePlex의 WPF Contrib 프로젝트를 살펴보십시오 (메뉴에서 "anything"을 붙일 수 있습니다).

12
Jaykul

간단한 답변을 찾고 있다면 이것이 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">
2
Mike Sage

여기에서 프로젝트를 만들고 포함 된 리소스를 사용했습니다 (빌드 작업은 리소스가 아닌 내장 된 리소스로 설정 됨). 이 솔루션은 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;
    }
1
blackSphere