[英]How do I get the value of NotifyIcon.Icon property programmatically?
[英]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添加資源更好,因此您可以通過StaticResource
或DynamicResource
標記擴展將它們用作靜態/動態資源。
如果您不想將其添加到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.