アプリケーションにテーマを強制させようとしています-これは次のように簡単です: http: //arbel.net/blog/archive/2006/11/03/Forcing-WPF-to-use-a-specific-Windows -theme.aspx
ただ、今使っているテーマがわかりません。私はWindowsXPのデフォルトテーマを使用しています。その記事は言う
バージョンと公開鍵トークンを指定することが重要です
...その情報はどこで入手できますか?
アプリケーションにテーマを強制させようとしています-これは次のように簡単です: http: //arbel.net/blog/archive/2006/11/03/Forcing-WPF-to-use-a-specific-Windows -theme.aspx
ただ、今使っているテーマがわかりません。私はWindowsXPのデフォルトテーマを使用しています。その記事は言う
バージョンと公開鍵トークンを指定することが重要です
...その情報はどこで入手できますか?
テーマ名を取得するには、管理されていない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にロードされたテーマが1つだけの場合、現在のテーマ名も通知されることに注意してください。