我试图让我的应用程序强制一个主题 – 这是直接的,如下所示: http : //arbel.net/blog/archive/2006/11/03/Forcing-WPF-to-use-a-specific-Windows -theme.aspx
但是,我不知道现在使用的是什么主题。 我正在使用Windows XP的默认主题,无论可能。 那篇文章说
指定版本和公钥标记非常重要
…我在哪里得到这些信息?
要获取主题名称,您可以调用非托管的GetCurrentThemeName方法:
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);
您可以通过在GAC(在Exporer中打开c:\ Windows \ Assembly)中右键单击主题.dll(如PresentationFramework.Aero)来查找版本和公钥标记,也可以使用代码执行此操作。 只需使用AppDomain.CurrentDomain.LoadedAssemblies遍历所有加载的程序集,并找到你想要的:
foreach(Assembly a in AppDomain.CurrentDomain.LoadedAssemblies) if(a.Name.StartsWith("PresentationFramework.")) return a.FullName;
请注意, 如果在当前AppDomain中只加载了一个主题,则循环遍历加载的程序集也会告诉您当前的主题名称。