Skins & Themes
Styling complex controls such as Calendars and GridViews can be very difficult because of the way in which they render. To address this problem, Microsoft developed the concept of skins and themes. Skins and themes can be thought of as a server-side version of style sheets.
Skins
Skin files have a .skin file extension. They live in the "App_Themes" folder. There are two types of control skins: default skins and named skins. Default skins apply to all controls of the same type when a Theme is applied to a page. Default skins do not have a SkinID attribute. Named skins have a SkinID attribute set and do not automatically apply to controls when a Theme is applied.
Themes
Themes are special folders that contain .skin files. The name of the folder dictates the name of the theme. The @Page directive has an attribute named Theme within which a named theme can be specified. To programmatically set the theme for a page, override the OnPreInit event handler and set base.Theme = "MyTheme";. Alternatively the theme can be specified in the web.config file using the following syntax:
<system.web>
<pages theme="MyTheme"/>
</system.web>
Theme-specific Images
Consider that you are developing a multi-branded site whereby the branding logos that a user sees within a banner area are different for each user. A user from company A wants to see a different banner image than a user from company B despite the fact that they are actually browsing the same site. One solution to this problem is to use theme-specific images. Create a folder beneath the theme folder called Images and place the brand-specific images for that theme into that folder. Define a skin file for the images called Images.skin and within that skin file define a skin with named IDs for each of the branding images. The skin can define any of the regular attributes for a server control, including the image path and alternate text. Within the actual web form markup, specify only:
<asp:Image ID="imgMainLogo" SkinID="MainLogoSkin" runat="server" />
This allows the skin to specify the path for the image, and even more importantly allows the skin to specify a relative path to the Images directory that we created within the theme directory. Now by choosing a different theme for the page, the branding images displayed on that page will also change. This is a really neat way to encapsulate branding changes within the theme and means that branding specific code is reduced to the single line of code that applies the appropriate theme.