发布后图标不起作用

时间:2011-11-22 10:17:30

标签: c# wpf icons

我有一个简单的应用程序。单击按钮时,任务栏图标会更改。当我从visual studio运行这个应用程序时,一切正常,但是当我发布WPF应用程序时,任务栏图标不起作用(没有)。

构建操作设置为“始终嵌入资源/复制”,我也测试了“资源”,但它不起作用。

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

框架左上角的图标会发生变化,但任务栏中的图标不会更改。

有人可以帮我吗?

@Edit,

感谢@ Pavel的评论,我得到了它的工作。但现在仍然存在一个问题:

当我在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后:任务栏中的图标不会更改,叠加层工作,应用程序顶角的图标会发生变化。

任何人都能解释一下吗?

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:2)

我认为这条线适合你(你忘了......;组件/....):

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

用于图标使用

Build Action = Resource
Copy to OutputDirectory = Do not copy