App_Themes 目錄下的命名子目錄 (如 App_Themes/BlueTheme),包含一或多個 .skin 檔、選用 .css、圖片等靜態資源。.skin 檔案定義控制項屬性預設值 (如 <asp:Button runat="server" BackColor="Blue" ForeColor="White" />),不含 id、runat="server"。web.config (全站) → @ Page Theme="..." (單頁) → 程式碼 Page.Theme = "..." (動態)。App_Themes。App_Themes → 新增資料夾 → 命名 BlueTheme。BlueTheme → 加入新項目 → Skin 檔案 → 命名 Buttons.skin。<!-- Buttons.skin -->
<asp:Button runat="server" BackColor="#003399" ForeColor="White" Font-Bold="true" BorderStyle="Solid" BorderWidth="1px" BorderColor="#000066" />
<asp:TextBox runat="server" BorderColor="#003399" BorderWidth="1px" BorderStyle="Solid" />
<asp:Label runat="server" ForeColor="#003399" Font-Bold="true" />
<asp:GridView runat="server"
HeaderStyle-BackColor="#003399" HeaderStyle-ForeColor="White" HeaderStyle-Font-Bold="true"
RowStyle-BackColor="White" AlternatingRowStyle-BackColor="#EEF2FF"
GridLines="Horizontal" BorderColor="#003399" BorderWidth="1px" />
SkinID 區分:<asp:Button runat="server" SkinID="Primary" BackColor="#003399" ForeColor="White" />
<asp:Button runat="server" SkinID="Secondary" BackColor="Gray" ForeColor="White" />
頁面使用:<asp:Button SkinID="Primary" runat="server" />
Theme.css。web.config 或頁面無需額外設定,ASP.NET 自動將主題資料夾內所有 .css 以 <link> 註冊至頁面 <head>。/* Theme.css */
body { font-family: 'Microsoft JhengHei', sans-serif; background: #F5F8FC; }
.highlight { background: #FFF8DC; border: 1px solid #FFD700; padding: 4px; }
| 方式 | 範圍 | 設定位置 | 優先權 |
|---|---|---|---|
| web.config | 全站 | <pages theme="BlueTheme" /> | 低 |
| @ Page 指令 | 單頁 | <%@ Page Theme="GreenTheme" %> | 中 |
| 程式碼動態設定 | 單頁/使用者 | Page_PreInit { Page.Theme = "RedTheme"; } | 高 |
| 問題 | 原因 | 解決 |
|---|---|---|
| 主題不生效、無樣式變化 | 主題資料夾不在 App_Themes 下、或 Skin 檔語法錯誤 (含 id/runat) | 檢查目錄結構、Skin 檔僅含控制項標籤與屬性 |
| 動態切換主題無效 | 在 PreInit 之後設定 Page.Theme | 移至 Page_PreInit 事件 |
| CSS 未載入 | 主題資料夾無 .css、或路徑錯誤 | 確認 .css 置於主題資料夾根目錄、檢查瀏覽器 Network 面板 |
| SkinID 不生效 | Skin 定義缺少 SkinID、或頁面控制項未設定 SkinID | 雙方皆需指定相同 SkinID 字串 |
ASP.NET 2.0 主題與外觀 將「樣式定義」從頁面程式碼中完全分離,實現全站一致性、零程式碼切換風格、設計師與開發者並行作業。善用 App_Themes、.skin、.css、SkinID、動態切換與本地化,即可打造專業級、可維護、使用者個人化的 Web 應用外觀系統。