2011-11-22 12 views
5

Tengo una aplicación simple. Cuando haces clic en un botón, el icono de la barra de tareas cambia. Cuando ejecuto esta aplicación desde Visual Studio, todo funciona bien, pero cuando publico la aplicación WPF, el ícono de la barra de tareas no funciona (no hay ninguno).Los iconos no funcionan después de publicar

La acción de compilación se establece en "recurso/copia incrustado siempre", también he probado "Recurso" pero no funciona.

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

el icono en la esquina superior izquierda de los cambios de marco, pero el que está en la barra de tareas no.

¿Alguien me puede ayudar, por favor?

@Edit,

lo tengo para trabajar, gracias a @ comentarios de Pavel. Pero ahora existe una clara dificultad:

Cuando corro en Visual Studio, y hacer esto:

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

El icono cambia. Pero con la versión publicada, no cambia.

@@ Editar,

autorización así que este es mi código cuando se presiona un botón:

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 }; 

qué hace: Cuando se ejecuta desde VS: el icono de la barra de tareas en los cambios, el la superposición funciona, el icono en la esquina superior de la aplicación cambia.

Después de la compilación ejecutar el exe: el icono en la barra de tareas NO cambia, la superposición funciona, el icono en la esquina superior de la aplicación cambia.

¿Alguien puede explicar esto?

+0

recuerdo un problema similar una vez, pero no puede recordar los detalles. Tenía que ver con que el paquete no estuviera en la carpeta bin, o que no tuviera el recurso en una carpeta bin dentro del paquete. No tengo tiempo para buscarlo ahora, lo siento. – shawty

Respuesta

2

creo que esta línea funcione para usted (error se han olvidado el ...; componente/....):

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

para el icono de uso

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

Esto da un error, incluso en el estudio visual cuando corro. Antes, funcionó en Visual Studio. – Nealv

+0

¿Cuál es el mensaje de error? – punker76

+0

ejecutando esta línea: iconUri = new Uri ("paquete: // aplicación: ,,,/SwitchLive; componente/images/local_network.ico", UriKind.Relative); Obtengo: 'La invocación del constructor en el tipo' SwitchLive.MainWindow 'que coincide con las restricciones de enlace especificadas arrojó una excepción'. Número de línea '3' y posición de línea '9'. – Nealv

2

intenta establecer medidas de construcción en 'recurso' y utilizar un ayudante:

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

¿Qué es la variable de tipo de línea? – Nealv

+0

@Nealv baseType es cualquier tipo del ensamblaje al que se adjunta el recurso. –

+0

Ok, este trabajo gracias ya, pero no tengo otro problema. Puedes revisar la edición de mi pregunta, por favor. – Nealv

Cuestiones relacionadas