it-swarm-vi.tech

Làm cách nào để sử dụng biểu tượng là tài nguyên trong WPF?

Tôi có một tệp .ico được nhúng dưới dạng tài nguyên (xây dựng hành động được đặt thành tài nguyên). Tôi đang cố gắng tạo một Thông báo. Làm thế nào tôi có thể tham khảo biểu tượng của tôi?

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

Tệp biểu tượng của bạn nên được thêm vào một trong các tập hợp dự án của bạn và Hành động xây dựng của nó phải được đặt thành Tài nguyên. Sau khi thêm một tham chiếu đến hội, bạn có thể tạo một Thông báo như thế này:

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

Mẫu sử dụng phổ biến là có biểu tượng thông báo giống như biểu tượng của cửa sổ chính. Biểu tượng được định nghĩa là một tệp PNG.

Để làm điều này, hãy thêm hình ảnh vào tài nguyên của dự án và sau đó sử dụng như sau:

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

Trong cửa sổ 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

Chà, bạn không muốn sử dụng tài nguyên kiểu resx: bạn chỉ cần dán tệp ico trong dự án của mình vào một thư mục (giả sử "ArtWork") và trong các thuộc tính, đặt Hành động xây dựng thành "Tài nguyên" ...

Sau đó, bạn có thể tham chiếu nó trong XAML bằng cách sử dụng GÓI URI ... "pack: // application: ,/Ảnh minh họa/Notify.ico"

Xem tại đây: http://msdn.Microsoft.com/en-us/l Library/aa970069.aspxmẫ

Nếu bạn muốn trở nên nhiều hơn một chút ... giống như WPF, bạn nên xem xét dự án Đóng góp WPF trên CodePlex có điều khiển NotifyIcon mà bạn có thể tạo trong XAML và sử dụng các menu WPF tiêu chuẩn (vì vậy bạn có thể dán "bất cứ thứ gì" vào menu).

12
Jaykul

Nếu bạn chỉ tìm kiếm câu trả lời đơn giản, tôi nghĩ đây là nơi MyApp là tên ứng dụng của bạn và đó là tên không gian tên gốc cho ứng dụng của bạn. Bạn phải sử dụng cú pháp URI gói, nhưng nó không quá phức tạp để kéo một biểu tượng ra khỏi tài nguyên được nhúng của bạn.

    <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

Tôi đã tạo một dự án ở đây và sử dụng tài nguyên nhúng (hành động xây dựng được đặt thành Tài nguyên nhúng, thay vì chỉ là tài nguyên). Giải pháp này không hoạt động với Resource, nhưng bạn có thể thao tác nó. Tôi đã đặt cái này lên OnIntialized () nhưng nó không phải ở đó.

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