java
sql
iphone
c
xml
ajax
python
mysql
database
linux
objective-c
eclipse
html5
json
perl
algorithm
tsql
asp
api
jsp
This functionality isn't built into ASP.NET. Nevertheless, you could implement it fairly easily:
HttpApplication.BeginRequest
HttpRequest.PhysicalPath
HttpContext.RewritePath
Default themes as you describe aren't supported by ASP.NET. There are regular Themes and StyleSheetThemes, but changing them dynamically is more useful at the Page request level than for individual Controls or static files.
Themes
StyleSheetTheme
You can code up your own version of themes for static files using URL rewriting or routing -- but then it's not really Themes any more.
For controls like <asp:Image>, you could override them and modify properties such as ImageUrl based on which files exist in some hierarchy of "theme" folders. Then use tag mapping to replace all instances of that control with the new one, without requiring any markup changes.
<asp:Image>
ImageUrl
FWIW, the BeginRequest event in Global.asax is only invoked for dynamic files in IIS (Cassini calls it for statics, too). To support statics in IIS, you'll need an HttpModule, and you'll also need to configure IIS to run in Integrated mode.
BeginRequest
HttpModule