암시 스타일 누락 4종 추가 — ToolTip·ToolBar 자식·포커스링·스크롤 코너
앞 커밋(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 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
308197c15e
commit
14944bd316
@@ -318,6 +318,63 @@
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<!-- =====================================================================
|
||||
ToolTip — 저장소 48곳에서 쓰는데 스타일이 없었다.
|
||||
스타일이 없으면 Aero2 기본 밝은 팝업으로 떨어지고, 내부 문자열이 만든 TextBlock 은
|
||||
앱 전역 암시 스타일(B.Ink)을 받아 **다크에서 1.15:1 로 글자가 사라진다**.
|
||||
(ListView·Window 와 정확히 같은 부류의 결함이다.)
|
||||
===================================================================== -->
|
||||
<Style TargetType="ToolTip">
|
||||
<Setter Property="Foreground" Value="{DynamicResource B.Ink}" />
|
||||
<Setter Property="Background" Value="{DynamicResource B.Surface}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource B.Line2}" />
|
||||
<Setter Property="FontFamily" Value="Malgun Gothic" />
|
||||
<Setter Property="FontSize" Value="12" />
|
||||
<Setter Property="MaxWidth" Value="420" />
|
||||
<Setter Property="HasDropShadow" Value="False" />
|
||||
<Setter Property="Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate TargetType="ToolTip">
|
||||
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
|
||||
BorderThickness="1" CornerRadius="6" Padding="9,6" SnapsToDevicePixels="True">
|
||||
<ContentPresenter>
|
||||
<ContentPresenter.Resources>
|
||||
<Style TargetType="TextBlock">
|
||||
<Setter Property="Foreground" Value="{DynamicResource B.Ink}" />
|
||||
<Setter Property="TextWrapping" Value="Wrap" />
|
||||
</Style>
|
||||
</ContentPresenter.Resources>
|
||||
</ContentPresenter>
|
||||
</Border>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<!--
|
||||
ToolBar 는 직계 자식에 SetResourceReference 로 자기 키 스타일을 꽂아 암시 Button 스타일을
|
||||
이긴다 — 이 키들을 채워주지 않으면 툴바 안 버튼만 Aero2 로 남는다(미리보기 창).
|
||||
-->
|
||||
<Style x:Key="{x:Static ToolBar.ButtonStyleKey}" TargetType="Button" BasedOn="{StaticResource Subtle}" />
|
||||
<Style x:Key="{x:Static ToolBar.ToggleButtonStyleKey}" TargetType="ToggleButton" BasedOn="{StaticResource {x:Type ToggleButton}}" />
|
||||
<Style x:Key="{x:Static ToolBar.SeparatorStyleKey}" TargetType="Separator" BasedOn="{StaticResource {x:Type Separator}}" />
|
||||
<Style x:Key="{x:Static ToolBar.TextBoxStyleKey}" TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}" />
|
||||
|
||||
<!--
|
||||
키보드 포커스 표시. Aero2 기본은 검정 점선이라 다크 버튼 채움(#262626) 위에서 1.39:1 이고,
|
||||
커스텀 Button 템플릿에 IsKeyboardFocused 트리거도 없어 Tab 위치를 알 단서가 전혀 없었다.
|
||||
-->
|
||||
<Style x:Key="{x:Static SystemParameters.FocusVisualStyleKey}">
|
||||
<Setter Property="Control.Template">
|
||||
<Setter.Value>
|
||||
<ControlTemplate>
|
||||
<Rectangle Margin="-2" StrokeThickness="1.4" RadiusX="6" RadiusY="6"
|
||||
Stroke="{DynamicResource B.Accent}" StrokeDashArray="2 2" SnapsToDevicePixels="True" />
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
|
||||
<!-- ===== 콤보박스 ===== -->
|
||||
<Style x:Key="B.ComboItem" TargetType="ComboBoxItem">
|
||||
<Setter Property="Foreground" Value="{DynamicResource B.Ink}" />
|
||||
|
||||
@@ -51,4 +51,11 @@
|
||||
<!-- 플로팅 요소(팔레트 바·플라이아웃) 그림자 — 라이트는 흰 배경에 검은 그림자가 튀지 않게 더 넓고 옅게 -->
|
||||
<DropShadowEffect x:Key="B.FloatShadow" BlurRadius="20" ShadowDepth="3" Direction="315" Opacity="0.5" Color="Black" RenderingBias="Quality" />
|
||||
|
||||
<!--
|
||||
ScrollViewer 우하단 코너 사각형(가로·세로 막대가 동시에 뜰 때 노출)은 프레임워크 템플릿
|
||||
소속이라 우리 스타일이 닿지 않는다. 템플릿이 이 시스템 키를 DynamicResource 로 읽으므로
|
||||
키 자체를 덮어써서 테마에 맞춘다 — 안 하면 다크 화면에 밝은 회색(#F0F0F0) 사각형이 박힌다.
|
||||
-->
|
||||
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#151515" />
|
||||
|
||||
</ResourceDictionary>
|
||||
|
||||
@@ -76,4 +76,7 @@
|
||||
<!-- 플로팅 요소(팔레트 바·플라이아웃) 그림자 — 라이트는 흰 배경에 검은 그림자가 튀지 않게 더 넓고 옅게 -->
|
||||
<DropShadowEffect x:Key="B.FloatShadow" BlurRadius="26" ShadowDepth="5" Direction="270" Opacity="0.14" Color="Black" RenderingBias="Quality" />
|
||||
|
||||
<!-- ScrollViewer 코너 사각형 — 다크 대응본 주석 참조(프레임워크 템플릿 소속이라 키를 덮어쓴다) -->
|
||||
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FFFFFF" />
|
||||
|
||||
</ResourceDictionary>
|
||||
|
||||
Reference in New Issue
Block a user