Pregunta

Estoy tratando de hacer de mi fuerza de aplicación un tema: esto es sencillo como se muestra aquí: http://arbel.net/blog/archive/2006/11/03/forcing-wpf-to-use-a-specific-windows-theme.aspx

Sin embargo, no sé qué tema estoy usando ahora. Estoy usando el tema predeterminado de Windows XP, sea lo que sea. Ese artículo dice

Es importante especificar la versión y el token de clave pública

... ¿de dónde saco esa información?

¿Fue útil?

Solución

Para obtener el nombre del tema, puede llamar al método GetCurrentThemename no administrado:

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

Puede encontrar la versión y el token de clave pública haciendo clic derecho en el tema .dll (como PresentationFramework.aero) en el GAC (Open C: Windows Assembly en Exporer), o puede usar el código para hacerlo. Simplemente pase por todos los conjuntos cargados usando AppDomain.CurrentDomain.LoadedAssemblies y encuentre el que desee:

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

Tenga en cuenta que el bucle a través de los conjuntos cargados también le indicará el nombre del tema actual si Solo se ha cargado un tema en el AppDomain actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top