소스(Core/Shell/Launcher)와 실행 PC가 받아갈 업데이트 파일(dist)을 함께 올린다. Launcher가 켤 때 이 저장소의 dist와 D:\UbisamPlatform\bin을 비교해 새 버전이면 받아간다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
패치 09 — MessageBox를 테마 적용 대화상자로
WPF의 MessageBox는 OS 크롬이라 스타일을 입힐 수 없습니다. 다크모드에서 혼자 밝은 창이 뜨는 이유입니다. 같은 모양의 커스텀 창으로 대체합니다.
MessageUtil의 시그니처는 그대로입니다 — ShowInfo, ShowError, ShowYesNo, ShowSaveSuccessDialog, ShowSaveFailedDialog, Toast 5종 전부 동일합니다. 호출하는 쪽은 한 줄도 고칠 필요가 없습니다.
모양
- OS 타이틀바 없음(
WindowStyle="None") — 제목줄을 직접 그리고 드래그로 옮길 수 있음 - 폭 420 고정, 높이는 내용에 맞춰 자동
- 셸과 같은 3단 구성: 제목줄(판) / 본문(바탕) / 버튼줄(판), 사이는 1px 헤어라인
- 본문은 아이콘 24px + 메시지, 아이콘은 상단 정렬(메시지가 길어도 위에 고정)
- 버튼은 우측 하단. 확인/예가 주 동작(
Accent.Fill채움), 아니오가 보조(외곽선) - 아이콘: 알림
circle-info, 오류circle-x(붉은색), 확인circle-help - Enter = 확인, Esc = 취소
1. 새 파일 3개
| 이 프로젝트 | 리포지토리 |
|---|---|
code/UbisamBase.Core/Messaging/MessageDialog.xaml |
src/UbisamBase.Core/Messaging/MessageDialog.xaml (신규) |
code/UbisamBase.Core/Messaging/MessageDialog.xaml.cs |
src/UbisamBase.Core/Messaging/MessageDialog.xaml.cs (신규) |
code/UbisamBase.Core/Messaging/MessageUtil.cs |
src/UbisamBase.Core/Messaging/MessageUtil.cs (교체) |
2. 갱신 파일 3개
| 파일 | 변경 |
|---|---|
Themes/Icons.xaml |
아이콘 3종 추가 — Ubisam.Icon.Info / .Question / .Error |
Themes/Colors.Light.xaml |
오류색 토큰 2개 — Danger #C93B3B / Danger.Fill #B32F2F |
Themes/Colors.Dark.xaml |
오류색 토큰 2개 — Danger #F07070 / Danger.Fill #B33A3A |
붉은색은 대화상자 아이콘과 실패 표시에만 씁니다 — 장식용 색을 늘리지 않는 것이 이 시스템의 규칙입니다.
3. 쓰는 법 (변화 없음)
MessageUtil.ShowInfo("저장", "저장되었습니다.");
MessageUtil.ShowError("저장 실패", "저장하지 못했습니다.");
if (MessageUtil.ShowYesNo("확인", "저장하지 않은 변경 사항이 있습니다.\n그래도 나가시겠습니까?"))
{
// 예를 눌렀을 때
}
MessageUtil.ShowSavedToast(logger);
여러 줄 메시지는 \n을 그대로 쓰면 됩니다 — TextWrapping="Wrap"이라 폭을 넘기면 자동으로도 접힙니다.
4. 확인
저장버튼을 눌러 대화상자가 뜰 때 OS 타이틀바가 없고 셸과 같은 각진 프레임인지- 다크 테마에서 대화상자도 어두운지 (밝은 창이 뜨면 파일이 교체되지 않은 것)
- 제목줄을 끌어 창이 움직이는지
- Enter로 확인, Esc로 취소가 되는지
- 오류 대화상자의 아이콘만 붉은색이고, 버튼은 accent인지
- 확인(YesNo) 대화상자에서 "아니오"가 보이고 false를 돌려주는지
- 부모 창 가운데에 뜨는지
주의
MessageDialog는ShellStyles.xaml을 자체Window.Resources에 머지합니다 — 별도 창이라 셸의 리소스를 상속받지 못하기 때문입니다. 이 줄을 지우면 스타일이 빠집니다.- 작업 표시줄에 안 뜨게
ShowInTaskbar="False"로 두었습니다. - 부팅 초기(
MainWindow가 아직 로드되지 않은 시점)에 호출하면 화면 가운데에 뜹니다.