2011-11-22 35 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