development

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

big-blog 2020. 11. 17. 20:00
반응형

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


리소스로 포함 된 .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"라고 함)에 붙이고 속성에서 Build Action을 "Resources"로 설정하기 만하면됩니다.

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

여기 참조 : http://msdn.microsoft.com/en-us/library/aa970069.aspx샘플

좀 더 WPF와 같은 사람이되고 싶다면 XAML로 만들 수있는 NotifyIcon 컨트롤이 있고 표준 WPF 메뉴를 사용하는 CodePlex WPF Contrib 프로젝트를 살펴 봐야 합니다. "메뉴).


간단한 대답을 찾고 있다면 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;
    }

참고 URL : https://stackoverflow.com/questions/74466/how-do-i-use-an-icon-that-is-a-resource-in-wpf

반응형