Иконки не работают после публикации - PullRequest
5 голосов
/ 22 ноября 2011

У меня есть простое приложение. Когда вы нажимаете кнопку, значок панели задач меняется. Когда я запускаю это приложение из 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);

Значок меняется. Но с опубликованной версией это не изменится.

@@ Edit

Хорошо, вот мой код, когда я нажимаю кнопку:

  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 ]

2 голосов
/ 22 ноября 2011

я думаю, что эта строка работает для вас (вы забыли ...; компонент /....):

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

для значка используйте

Build Action = Resource
Copy to OutputDirectory = Do not copy
2 голосов
/ 22 ноября 2011

Попробуйте установить действие сборки в «Ресурсе» и использовать помощника:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...