2011-11-22 39 views
5

我有一個簡單的應用程序。當你點擊一個按鈕時,tasbar圖標會改變。當我從Visual Studio運行這個應用程序時,一切正常,但是當我發佈WPF應用程序時,任務欄圖標不起作用(沒有)。發佈後圖標無法正常工作

生成操作設置爲「嵌入資源/始終複製」,我也測試了「資源」,但它不起作用。

var iconUri = new Uri("pack://application:,,,/images/internet_connection.ico", UriKind.RelativeOrAbsolute); 
     this.Icon = BitmapFrame.Create(iconUri); 

框架左上角的圖標發生變化,但任務欄中的圖標沒有變化。

任何人都可以幫助我嗎?

@Edit,

我得到它的工作,感謝爲@帕維爾的評論。但是現在有一個問題依然存在:

當我在Visual Studio中運行它,我這樣做:

var iconUri = UriHelper.GetUri(this.GetType(), "images/local_network.ico"); 
     this.Icon = BitmapFrame.Create(iconUri); 

圖標的變化。但隨着發佈的版本,它不會改變。

@@編輯,

好了,所以這是我的代碼時,我按下一個按鈕:

var iconUri = UriHelper.GetUri(this.GetType(), "images/internet_connection.ico"); 
     this.Icon = BitmapFrame.Create(iconUri); 
     mNotifyIcon = new NotifyIcon 
     { 
      BalloonTipText = "The app has been minimised. Click the tray icon to show.", 
      BalloonTipTitle = "The App", 
      Text = "The App", 
      Icon = BitmapFrame.Create(iconUri) 
     }; 

     BitmapImage image = new BitmapImage(); 
     image.BeginInit(); 
     image.UriSource = UriHelper.GetUri(this.GetType(), "images/internet_connection.png"); 
     image.EndInit(); 
     TaskbarItemInfo = new System.Windows.Shell.TaskbarItemInfo() { Overlay = image }; 

它能做什麼: 當從VS運行:在任務欄上的圖標時,疊加工作,應用程序頂部的圖標發生變化。

構建完成後運行exe:任務欄中的圖標不會更改,覆蓋圖工作,應用程序頂部角落中的圖標會更改。

任何人都可以解釋這一點嗎?

+0

我記得有一個類似的問題一次,但不記得細節。這與該包不在bin文件夾中,或者沒有將資源放在包中的bin文件夾中有關。雖然沒有時間去查看它,但是,對不起。 – shawty

回答

2

我覺得這一行對你的作品(你已經忘了...;組件/ ....):

var iconUri = new Uri("pack://application:,,,/YourProjectName;component/images/internet_connection.ico", UriKind.RelativeOrAbsolute); 

的圖標使用

Build Action = Resource 
Copy to OutputDirectory = Do not copy 
+0

即使在運行視覺工作室時,也會出現錯誤。之前,它在Visual Studio中工作。 – Nealv

+0

什麼是錯誤信息? – punker76

+0

通過運行這一行:iconUri = new Uri(「pack:// application:,,,/SwitchLive; component/images/local_network.ico」,UriKind.Relative);我得到:'類型'SwitchLive.MainWindow'上與指定綁定約束匹配的構造函數的調用引發了一個異常。'行號「3」和行位置「9」。 – Nealv

2

嘗試設置在「資源」建設行動,並使用一個輔助:

public static class UriHelper 
{ 
    /// <summary> 
    /// Gets absulute URI for provided relative path 
    /// </summary> 
    /// <param name="baseType">Base type for ussage as URI root</param> 
    /// <param name="relativePath">Relative path</param> 
    /// <returns>Absolute Uri</returns> 
    public static Uri GetUri(Type baseType, string relativePath) 
    { 
     Assembly oAssembly = Assembly.GetAssembly(baseType); 
     AssemblyName oName = oAssembly.GetName(); 
     return new Uri( 
       String.Format(
        "pack://application:,,,/{0};v{1};component/{2}", 
        oName.Name, 
        oName.Version.ToString(), 
        relativePath), 
       UriKind.Absolute); 
    } 
} 
+0

什麼是basetype變量? – Nealv

+0

@Nealv baseType是資源所附的程序集中的任何類型。 –

+0

好的,這項工作謝謝你,但沒有我有其他問題。你可以在我的問題上檢查編輯嗎? – Nealv