Frage

Ich versuche, meine Anwendungstruppe zu einem Thema zu machen - dies ist einfach, wie hier gezeigt: http://arbel.net/blog/archive/2006/11/03/forcing-wpf-t-se-use-specific-windows-theme.aspx

Ich weiß jedoch nicht, welches Thema ich jetzt verwende. Ich verwende das Windows XP -Standardthema, was auch immer das sein mag. In diesem Artikel heißt es

Es ist wichtig, die Version und das Public Key -Token anzugeben

... Woher bekomme ich diese Informationen?

War es hilfreich?

Lösung

Um den Themennamen zu erhalten, können Sie die nicht verwaltete GetCurrentThemeName -Methode nennen:

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

Sie können die Version und das öffentliche Schlüssel-Token finden, indem Sie mit der rechten Maustaste auf das Thema .dll (wie z. B. PräsentationFramework.aero) im GAC (Open C: Windows Assembly in Exporer) klicken, oder Sie können Code verwenden. Schleifen Sie einfach alle geladenen Baugruppen mit appdomain.currentdomain.loadedAssemblies durch und finden Sie die gewünschten:

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

Beachten Sie, dass Sie durch die geladenen Baugruppen auch den aktuellen Themennamen mitteilen wenn In der aktuellen Appdomain wurde nur ein Thema geladen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top