Est-il possible de définir une icône de manière à ce qu'elle soit utilisée sur chaque fenêtre de l'application en cours? Ainsi je ne devrais la définir qu'une seule fois (et pas sur chaque fenêtre manuellement)..?
Réponses
Trop de publicités?Une bonne référence sur le sujet se trouve ici MSDN. Indique que vous avez une icône pour l'application (icône de bureau), et une pour chaque fenêtre.
Une fenêtre WPF affiche toujours une icône. Lorsqu'aucune n'est fournie en définissant Icon, WPF choisit une icône à afficher en se basant sur les règles suivantes:
-
Utiliser l'icône de l'assembly, si spécifiée.
-
Si l'icône de l'assembly n'est pas spécifiée, utiliser l'icône par défaut de Microsoft Windows.
Référence du contenu communautaire :
"Un petit conseil : si vous définissez l'icône de l'application et que vous vous attendez à la voir sur la fenêtre - elle ne s'affichera pas si vous exécutez en mode débogage depuis Visual Studio. En l'exécutant de manière externe ou sans attacher (ctrl + f5), l'icône s'affiche comme prévu."
Sous VS2010, ouvrez les propriétés de l'exécutable de l'application principale et ouvrez l'onglet Application. Définissez l'icône sous 'Icône et Manifeste' dans la section Ressources.
Pour voir l'icône lors du débogage sous VS2010, vous devez ouvrir l'onglet Débogage et décocher l'option 'Activer le processus d'hébergement Visual Studio', sinon vous ne verrez que l'icône par défaut sur la plupart des fenêtres.
Je suppose que le code de chargement de l'icône est confondu par le processus d'hébergement et recherche dans "someapplication.vshost.exe" au lieu de "someapplication.exe" pour les icônes.
Cela semble avoir été corrigé dans VS2013.
La raison pour laquelle "Activer le processus d'hébergement Visual Studio" fait que l'icône ne fonctionne pas est qu'elle est démarrée en utilisant le vshost.exe, et donc le manifeste n'est pas lu correctement. Il en va de même si vous avez d'autres éléments dans le manifeste, comme des contrôles ocx regfree, etc., qui nécessitent le chargement du manifeste.
Vous pouvez également essayer ceci pour définir votre propre icône :
private void Page_Loaded_1(object sender, RoutedEventArgs e)
{
Uri iconUri = new Uri(@"C:\Apps\R&D\WPFNavigation\WPFNavigation\Images\airport.ico", UriKind.RelativeOrAbsolute);
(this.Parent as Window).Icon = BitmapFrame.Create(iconUri);
}