초기 커밋: SheetMe 서식생성기 (P0~P5 완료 상태)
레거시 서식생성기(VB.NET WinForms) 대체용 C#/.NET 10 WPF 디자이너. 기준선: 실DB 활성 디자인 1,271건 왕복 의미론 diff 0 / 예외 0, 단위 테스트 49/49. 이 커밋에 함께 포함된 자격증명 분리: - appsettings.json 을 __HOST__/__PASSWORD__ 플레이스홀더로 전환 - 실접속 정보는 appsettings.Development.json 으로 분리(.gitignore 제외, csproj Debug 조건부 복사라 Release 산출물에 실리지 않음) - ConfigLoader 를 환경변수 > Development > appsettings 순 레이어링으로 변경, 미치환 플레이스홀더는 '미설정'으로 간주 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
<UserControl x:Class="SheetMe.Designer.Views.DesignerCanvasView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
|
||||
xmlns:vm="clr-namespace:SheetMe.Designer.ViewModels"
|
||||
xmlns:v="clr-namespace:SheetMe.Designer.Views"
|
||||
xmlns:bh="clr-namespace:SheetMe.Designer.Behaviors"
|
||||
mc:Ignorable="d"
|
||||
d:DataContext="{d:DesignInstance vm:DesignerViewModel}"
|
||||
Focusable="True" FocusVisualStyle="{x:Null}"
|
||||
PreviewKeyDown="OnCanvasPreviewKeyDown" PreviewKeyUp="OnCanvasPreviewKeyUp">
|
||||
|
||||
<!-- 키보드 단축키(텍스트 입력 보호 포함) -->
|
||||
<b:Interaction.Behaviors>
|
||||
<bh:CanvasKeyboardBehavior/>
|
||||
</b:Interaction.Behaviors>
|
||||
|
||||
<!-- 디자인 캔버스: 스크롤 + 줌(LayoutTransform) 월드. 입력은 World 1곳에서 수신 -->
|
||||
<ScrollViewer x:Name="Scroll"
|
||||
HorizontalScrollBarVisibility="Auto"
|
||||
VerticalScrollBarVisibility="Auto"
|
||||
Background="{DynamicResource B.CanvasBg}"
|
||||
Focusable="False"
|
||||
PreviewMouseWheel="OnPreviewMouseWheel"
|
||||
PreviewMouseLeftButtonDown="OnPanMouseDown"
|
||||
PreviewMouseMove="OnPanMouseMove"
|
||||
PreviewMouseLeftButtonUp="OnPanMouseUp"
|
||||
LostMouseCapture="OnPanLostCapture">
|
||||
<Border Padding="24">
|
||||
<Grid x:Name="World"
|
||||
Background="Transparent"
|
||||
HorizontalAlignment="Left" VerticalAlignment="Top"
|
||||
Width="{Binding WorldWidth}" Height="{Binding WorldHeight}">
|
||||
<Grid.LayoutTransform>
|
||||
<ScaleTransform ScaleX="{Binding Zoom}" ScaleY="{Binding Zoom}"/>
|
||||
</Grid.LayoutTransform>
|
||||
|
||||
<b:Interaction.Behaviors>
|
||||
<bh:CanvasMouseBehavior/>
|
||||
<bh:CanvasDropBehavior/>
|
||||
</b:Interaction.Behaviors>
|
||||
|
||||
<!-- 층1: 페이지 스택 -->
|
||||
<ItemsControl ItemsSource="{Binding Pages}">
|
||||
<ItemsControl.ItemsPanel>
|
||||
<ItemsPanelTemplate>
|
||||
<Canvas/>
|
||||
</ItemsPanelTemplate>
|
||||
</ItemsControl.ItemsPanel>
|
||||
<ItemsControl.ItemContainerStyle>
|
||||
<Style TargetType="ContentPresenter">
|
||||
<Setter Property="Canvas.Left" Value="0"/>
|
||||
<Setter Property="Canvas.Top" Value="{Binding OffsetY}"/>
|
||||
</Style>
|
||||
</ItemsControl.ItemContainerStyle>
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<v:PageView/>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
|
||||
<!-- 층2: 선택/마퀴/가이드 오버레이 (표시 전용) -->
|
||||
<v:SelectionOverlayView DataContext="{Binding Overlay}"/>
|
||||
|
||||
<!-- 층3: 인라인 텍스트 에디터 (더블클릭 시 코드비하인드가 배치) -->
|
||||
<Canvas x:Name="EditorLayer"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
</ScrollViewer>
|
||||
</UserControl>
|
||||
Reference in New Issue
Block a user