Wie kann ich sagen, welches Windows -Thema ich verwende?
-
24-10-2019 - |
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?
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.