簡體   English   中英

從代碼中訪問資源以設置NotifyIcon.Icon

[英]Accessing resources from code for setting NotifyIcon.Icon

我試圖在WPF中獲取NotifyIcon的圖標。

所以我在一個Resources文件夾中為我的解決方案添加了一個.ico文件,並將構建操作設置為Resource

我試圖在代碼后面抓住這個資源,如下所示:

var icon = (Icon) Application.Current.FindResource("/Resources/icon.ico")

這不起作用。

除此之外: Application.Current.Resources.Count返回0

編輯

var i = new Icon(Application.GetResourceStream(new Uri("/systemtrayicon.ico", UriKind.Relative)).Stream);

將根中的圖標和構建操作設置為Resource

還是行不通。

再次編輯:

我需要清理解決方案並按照以下方式重建: WPF在加載圖像時拋出“無法找到資源”異常

這將100%有效

ni.Icon = new Icon(Application.GetResourceStream(new Uri("pack://application:,,,<Image Location From root>")).Stream);

例:

notify.Icon = new Icon(Application.GetResourceStream(new Uri("pack://application:,,,/images/favicon.ico")).Stream);

您必須將resourceName作為參數傳遞給FindResource方法,而不是Resource的路徑。 示例代碼如下所示:

var icon = (Icon) Application.Current.FindResource("myImage")

請注意,在上面的示例代碼中,“myImage”是資源名稱。

請參閱MSDN上的Application.FindResource方法。

你說,Application.Current.Resources.Count為零,這意味着你沒有在App.xaml文件中定義任何資源。

您可以像這樣向App.xaml添加資源:

<Application.Resources>
     <Image x:Key="myImage" Source="img.png" />
</Application.Resources>

您的圖標似乎是嵌入式資源。 FindResource無法使用嵌入式資源。 將您的圖標的BuildAction設置為Resource

有關WPF資源的更多信息,請參閱 MSDN頁面。

UPDATE

訪問嵌入式資源的代碼

Assembly.GetExecutingAssembly().GetManifestResourceStream("myImg.png");

但是,如果您已將此映像添加到Resources.Resx,您應該只能使用Resources.ResourceName

更新2

向App.xaml或任何ResourceDictionary添加資源更好,因此您可以通過StaticResourceDynamicResource標記擴展將它們用作靜態/動態資源。

如果您不想將其添加到App.xaml資源並仍想訪問它,我上面提到的一個選項是將它添加到Resources.Resx並使用Resources.ResourceName來引用圖標/圖像

另一種方法是自己創建System.Drawing.Icon ,示例代碼:

new System.Drawing.Icon(Application.GetResourceStream(new Uri("/Resources/icon.ico")));

就個人而言,我會使用XAML資源並將它們添加到App.xaml或ResourceDictionary。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM