From 14944bd3162e45f45cda982ca2c8b33b0d74d38c Mon Sep 17 00:00:00 2001 From: Msystech Date: Wed, 12 Aug 2026 13:13:59 +0900 Subject: [PATCH] =?UTF-8?q?=EC=95=94=EC=8B=9C=20=EC=8A=A4=ED=83=80?= =?UTF-8?q?=EC=9D=BC=20=EB=88=84=EB=9D=BD=204=EC=A2=85=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=E2=80=94=20ToolTip=C2=B7ToolBar=20=EC=9E=90?= =?UTF-8?q?=EC=8B=9D=C2=B7=ED=8F=AC=EC=BB=A4=EC=8A=A4=EB=A7=81=C2=B7?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A1=A4=20=EC=BD=94=EB=84=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 앞 커밋(Window 파생 클래스)과 같은 부류의 결함을 창별 정적 점검이 4건 더 찾아냈다. 전부 "스타일이 없으면 WPF 기본(Aero2) 밝은 크롬으로 떨어지고, 그 위 글자는 앱 전역 암시 TextBlock(B.Ink)을 정상적으로 받아 다크에서 사라진다"는 같은 메커니즘이다. [ToolTip — 48곳] 가장 넓다. MainView 31곳·InspectorView 15곳·대화상자 6곳 등에서 쓰는데 TargetType="ToolTip" 스타일이 저장소 전역에 하나도 없었다. 다크에서 명암비 1.15~1.17:1. B.Surface 채움 + B.Line2 테두리 + 라운드 6 으로 앱 룩에 맞췄다. [ToolBar 자식 키] ToolBar 는 직계 자식에 SetResourceReference 로 자기 키 스타일을 꽂아 암시 Button 스타일을 이긴다 — ToolBar 자체에 스타일을 줘도 그 안 버튼만 Aero2 로 남는다. ButtonStyleKey/ToggleButtonStyleKey/SeparatorStyleKey/TextBoxStyleKey 를 채웠다(미리보기 창). [포커스링] Aero2 기본 검정 점선이 다크 버튼 채움(#262626) 위에서 1.39:1 이고, 커스텀 Button 템플릿에 IsKeyboardFocused 트리거도 없어 Tab 위치를 알 단서가 전혀 없었다. SystemParameters.FocusVisualStyleKey 를 강조색 점선으로 재정의. [ScrollViewer 코너] 가로·세로 막대가 동시에 뜰 때 노출되는 우하단 사각형은 프레임워크 템플릿 소속이라 우리 스타일이 닿지 않는다. 템플릿이 SystemColors.ControlBrushKey 를 DynamicResource 로 읽으므로 그 키를 토큰 사전에서 덮어썼다 — 테마 전환도 따라간다. [진단 보강] --dialog-shots 에 암시 스타일 자가 점검을 추가했다. 툴팁·포커스링·툴바 자식·스크롤 코너는 팝업이거나 프레임워크 템플릿 소속이라 **창을 찍어도 스크린샷에 안 잡힌다** — 값으로 확인하지 않으면 회귀를 놓친다. 떼어 놓은 인스턴스는 트리에 붙기 전이라 Style 이 null 이므로 리소스 사전 존재 여부로 판정한다(처음엔 인스턴스 Style 을 봤다가 오판했다). 검증: 자가 점검 8종 전부 정의됨, 테스트 124/124, edit-smoke 실패 0, 왕복 1,271건 diff 0/예외 0, 종이 렌더 P062 픽셀 차이 0. Co-Authored-By: Claude Opus 5 --- .../Diagnostics/DialogShots.cs | 32 +++++++++++ .../Themes/DesignerTheme.xaml | 57 +++++++++++++++++++ src/SheetMe.Designer/Themes/Tokens.Dark.xaml | 7 +++ src/SheetMe.Designer/Themes/Tokens.Light.xaml | 3 + 4 files changed, 99 insertions(+) diff --git a/src/SheetMe.Designer/Diagnostics/DialogShots.cs b/src/SheetMe.Designer/Diagnostics/DialogShots.cs index 6e9d3d0..5a2a62e 100644 --- a/src/SheetMe.Designer/Diagnostics/DialogShots.cs +++ b/src/SheetMe.Designer/Diagnostics/DialogShots.cs @@ -60,6 +60,9 @@ public static class DialogShots } } + lines.Add(string.Empty); + lines.AddRange(StyleSelfCheck()); + File.WriteAllText(Path.Combine(outputDirectory, "_report.txt"), string.Join(Environment.NewLine, lines)); Console.WriteLine(string.Join(Environment.NewLine, lines)); @@ -72,6 +75,35 @@ public static class DialogShots } } + /// + /// 암시 스타일 자가 점검 — 스크린샷에 안 잡히는 표면(툴팁·포커스링·툴바 자식·스크롤 코너)이 + /// 실제로 테마 스타일을 받는지 값으로 확인한다. + /// 이들은 팝업이거나 프레임워크 템플릿 소속이라 창을 찍어도 보이지 않는데, 스타일이 없으면 + /// WPF 기본(Aero2) 밝은 크롬으로 떨어져 다크에서 글자가 사라진다. + /// + private static List StyleSelfCheck() + { + var lines = new List { "[암시 스타일 자가 점검 — 라이트 테마 기준]" }; + + // 떼어 놓은 인스턴스는 트리에 붙기 전이라 Style 이 아직 null 이다 — 사전에 있는지로 판정한다 + foreach (var (label, key) in new (string, object)[] + { + ("ToolTip", typeof(System.Windows.Controls.ToolTip)), + ("ListView", typeof(System.Windows.Controls.ListView)), + ("ToolBar", typeof(System.Windows.Controls.ToolBar)), + ("ToolBar.Button", System.Windows.Controls.ToolBar.ButtonStyleKey), + ("ToolBar.Separator", System.Windows.Controls.ToolBar.SeparatorStyleKey), + ("ToolBar.TextBox", System.Windows.Controls.ToolBar.TextBoxStyleKey), + ("FocusVisual", SystemParameters.FocusVisualStyleKey), + ("ScrollViewer코너", SystemColors.ControlBrushKey), + }) + { + var found = Application.Current.TryFindResource(key); + lines.Add($" {label,-18} {(found is null ? "★ 미정의(Aero2 폴백)" : "정의됨")}"); + } + return lines; + } + /// 창 생성기 목록 — 실제 사용 시와 같은 인자로 만든다(빈 껍데기를 찍으면 의미가 없다) private static List<(string Name, Func Factory)> Factories() { diff --git a/src/SheetMe.Designer/Themes/DesignerTheme.xaml b/src/SheetMe.Designer/Themes/DesignerTheme.xaml index 353965b..e251d2f 100644 --- a/src/SheetMe.Designer/Themes/DesignerTheme.xaml +++ b/src/SheetMe.Designer/Themes/DesignerTheme.xaml @@ -318,6 +318,63 @@ + + + + + + + + + + + + +