對話框規範
所有 DialogWindow 的殼層、版面與按鈕規則;清除紀錄對話框是範本。視覺語言與互動共通準則見 自製 UI 準則。
殼層
- 一律由
SqlAssistDialogs.Configure設定標題、尺寸、主題資源、介面字型、不進工作列與置中於擁有者; SQL Memory 的對話框經SqlMemoryActions.ConfigureWindow再指定 SSMS 擁有者。建構式不逐項設定。 - 內容外距
SqlAssistChrome.DialogPadding(16)。抬頭交給原生 Titlebar,內容不重複工具名稱。 - 高度隨內容時傳
height: null;可縮放的視窗給最小尺寸,捲動只放在會溢出的內容本身。
版面
原生 Titlebar 之下由上而下是「脈絡 → 資訊列 → 分段 → 頁尾」,元件都在 SqlAssistChrome:
| 元件 | 做法 |
|---|---|
CreateMetadataText | 淡色單行脈絡(範圍、筆數、更新時間),無上緣標題間距 |
CreateInfoBar | 語意圖示+可換行文字、極淡底色;說明不可復原或受保護的範圍,不另立標題 |
CreateSection | 淡色小標與內容間距 8、分段之間 16,第一段不留上緣 |
CreateCardSection | 由多個獨立區塊組成的頁面(用量分頁):小標在卡片外並對齊卡片內文字,內距 CardPadding;對話框表單不用 |
CreateOptionGroup/CreateOptionRow | 一塊表面裝一組選項;整列可點,標題+一行淡色說明,右側放只屬於該選項的附屬設定 |
CreateDialogFooter | 單一頁尾,見下節 |
CreateDangerButton | 主要動作本身是破壞性時使用:語意色淡底與配對前景 |
頁尾
- 一列三組:左側附屬動作(複製、開啟位置等不結束對話框的動作,幽靈按鈕)→ 中間狀態或摘要吃 剩餘寬度 → 右側結束動作,主要動作放最後。Tab 順序由左到右。
- 頁尾上距 16、按鈕間距 8、最小寬 80,都由元件決定;呼叫端不設按鈕的
Margin/MinWidth。 - 狀態平時留空,只回報操作結果或試算;省略的文字可從 Tooltip 讀全文。
按鈕與焦點
| 類型 | 結束動作 | IsDefault | IsCancel |
|---|---|---|---|
| 表單(編輯收藏、片段管理員) | 取消、儲存(主要) | 儲存 | 取消 |
| 破壞性(清除紀錄、確認框) | 取消、語意色動作 | 取消 | 取消 |
| 檢視(版本歷史、欄位剖析、儲存格、關於) | 關閉(主要) | 關閉 | 關閉 |
- 每個視窗只有一個主要動作與一組
IsDefault/IsCancel。危險動作不能成為預設,也不能只靠紅色警示; 初始焦點明確放在取消,因為IsDefault不等於焦點。 - 破壞性按鈕寫出動作與數量;條件一改就停用到重新計算完成。對話框本身已列出影響範圍時,不再疊第二層確認框。
- 確認框共用
SqlAssistConfirmationWindow:按鈕明寫刪除/停用/還原預設;問句一行,影響說明以\n分句、一句一行, 「無法復原」與「儲存後才寫檔」各自獨立成行。 一般成功回饋留在狀態列,失敗沿用原生訊息框。
檢視型:結果工具與關於
- 欄位剖析(
ResultGridProfileWindow)與儲存格完整內容(ResultGridCellWindow)不另放內容抬頭;欄 × 列、範圍、欄名、型別與長度走CreateMetadataText。 - 欄位剖析固定欄名、統計數字與表頭靠右,文字靠左;篩選列在表格上方。
- 完整內容只切換顯示換行,不重寫原文;NULL/空內容提示不混進可複製文字。
- 關於與診斷保留精簡品牌列,各分頁只有單一內容表面;品牌標誌由
SqlAssistChrome.CreateBrandMark呈現,原生標題列與 VSIX 套件使用SqlAssist.Icon.512.png。
新增或改版
- 殼層與外距用上述共用項,頁尾只呼叫
CreateDialogFooter,缺少的元件回到SqlAssistChrome.Dialogs擴充。 - 對照清除紀錄對話框的節奏,並依類型套上按鈕表。
- 淺色/深色、最小尺寸、長狀態文字與鍵盤路徑都要實測。