Question

Je suis en train de faire ma force d'application d'un thème - c'est simple comme le montre ici: http://arbel.net/blog/archive/2006/11/03/Forcing-WPF-to-use-a-specific- windows theme.aspx

Cependant, je ne sais pas ce thème que je me sers maintenant. J'utilise le thème par défaut de Windows XP, quel qu'il soit. Cet article dit

Il est important de préciser la version et le jeton de clé publique

... où puis-je obtenir cette information?

Était-ce utile?

La solution

Pour obtenir le nom du thème que vous pouvez appeler la méthode GetCurrentThemeName non gérée:

public string GetThemeName()
{
  StringBuilder themeNameBuffer = new StringBuilder(260);
  var error = GetCurrentThemeName(themeNameBuffer, themeNameBuffer.Capacity, null, 0, null, 0);
  if(error!=0) Marshal.ThrowExceptionForHR(error);
  return themeNameBuffer.ToString();
}

[DllImport("uxtheme.dll", CharSet=CharSet.Auto)]
public static extern int GetCurrentThemeName(StringBuilder pszThemeFileName, int dwMaxNameChars, StringBuilder pszColorBuff, int dwMaxColorChars, StringBuilder pszSizeBuff, int cchMaxSizeChars);

Vous pouvez trouver la version et la clé publique jeton par un clic droit sur le fichier .dll à thème (comme PresentationFramework.Aero) dans le GAC (ouvert c: \ Windows \ Assemblée Exporer), ou vous pouvez utiliser le code pour le faire . boucle seulement à travers toutes les assemblées chargées à l'aide AppDomain.CurrentDomain.LoadedAssemblies et trouver celui que vous voulez:

foreach(Assembly a in AppDomain.CurrentDomain.LoadedAssemblies)
  if(a.Name.StartsWith("PresentationFramework."))
    return a.FullName;

Notez que boucle à travers les assemblées chargées également vous dire le nom du thème actuel si un seul thème a été chargé dans l'AppDomain courant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top