using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using SheetMe.Designer.Services; using SheetMe.Designer.ViewModels; namespace SheetMe.Designer.Views; /// 미리보기 창 — 편집 크롬 없는 페이지 렌더(인쇄와 동일 비주얼) + 줌/인쇄. public partial class PreviewWindow : Window { #region Member Fields private readonly DesignerViewModel designer; private double zoom = 1.0; #endregion #region Constructors public PreviewWindow(DesignerViewModel designer) { this.designer = designer; InitializeComponent(); BuildPages(); } #endregion #region Methods private void BuildPages() { PagesHost.Children.Clear(); foreach (var page in designer.Pages) { var frame = new Border { Background = page.PaperBrush, BorderBrush = System.Windows.Media.Brushes.LightGray, BorderThickness = new Thickness(1), Margin = new Thickness(0, 0, 0, 20), Child = PrintService.BuildPageVisual(page), Width = page.WidthDip, Height = page.HeightDip, }; PagesHost.Children.Add(frame); } } private void OnPrint(object sender, RoutedEventArgs e) { try { PrintService.Print(designer, designer.Document.Title.Length > 0 ? designer.Document.Title : designer.Document.FormId); } catch (Exception ex) { DialogService.Notify(DialogKind.Error, "오류", "인쇄 중 오류가 발생했습니다.", ex.Message, this); } } private void OnZoomIn(object sender, RoutedEventArgs e) => ApplyZoom(zoom * 1.15); private void OnZoomOut(object sender, RoutedEventArgs e) => ApplyZoom(zoom / 1.15); private void ApplyZoom(double value) { zoom = Math.Clamp(value, 0.25, 3.0); ZoomTransform.ScaleX = zoom; ZoomTransform.ScaleY = zoom; ZoomText.Text = $"{zoom * 100:0}%"; } #endregion }