Programmatically retrieving all themes of a site and apply a theme
In SharePoint 2010 if you want to play with the theme via code it is different than the way it was in MOSS 2007 / WSS 3.0. We have to use Microsoft.SharePoint.Utilities.ThmxTheme class.
In this post I will show how we can retrieve all themes for a particular site and how we can set a theme to the website via code.
As you can see in the screen shot, I am using Default theme for my SharePoint website.
In SharePoint 2010 all themes are based on .thmx, because of that even if you create a theme in PowerPoint 2010 you can directly use that theme in your SharePoint website.
First I will show how we can download and upload a theme from PowerPoint 2010 to SharePoint 2010 and after that will show how we can apply it via code ( we can do it through UI easily but my primary objective is to show how we can manage theme via object model).
1. Open a new instance of PowerPoint 2010 and click on the design menu and select a theme and then click on “Save Current Theme” as selected in the below
I have saved the file with name as MyPowerPointTheme.thmx to the hard drive.
2. Open SharePoint site and then go to the theme gallery : site actions à site settings à Galleries à Themes, Click on “add a new item” and then upload the saved thmx file from the hard drive to the theme gallery list.
3. Now you can see “MyPowerPointTheme.thmx” uploaded and showing as a new item in the list.
Alright now we can see how we can pull all themes information via code and apply the custom theme to the SharePoint website. Below code is self-explanatory ( I think so J ) , It will output the details of all themes and apply the custom theme that I got from PowerPoint 2010.
static void Main(string args)
using(SPSite oSite = new SPSite("http://sps-wfe1"))
using (SPWeb oWeb = oSite.OpenWeb())
System.Collections.ObjectModel.ReadOnlyCollection<ThmxTheme> oThemes = ThmxTheme.GetManagedThemes(oSite);
// list out all themes of this particular site
foreach (ThmxTheme oTheme in oThemes)
Console.WriteLine("Name: " + oTheme.Name + "\n" + "File Name: " + oTheme.File.Name + "\n" + "Accessible Descriptoin: " + oTheme.AccessibleDescription + "\n");
// Apply my custom theme to the current website
if (oTheme.Name == "MyPowerPointTheme")
Now we can see that the current site theme changed to my custom theme