diff --git a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml index 8940371..108400f 100644 --- a/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml +++ b/AIStudio.Wpf.DiagramApp/Views/MainWindow.xaml @@ -1900,6 +1900,7 @@ Width="180" HorizontalAlignment="Right" VerticalAlignment="Bottom" + OffSet="True" DesignerCanvas="{Binding ElementName=diagram}" MaximumZoomValue="{Binding MaximumZoomValue,Mode=TwoWay}" MinimumZoomValue="{Binding MinimumZoomValue,Mode=TwoWay}" diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs index 4b0b508..3837487 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner.Demo/ViewModels/ZoomViewModel.cs @@ -13,10 +13,9 @@ namespace AIStudio.Wpf.DiagramDesigner.Demo.ViewModels Info = "Drag the upper-right scroll bar to make the canvas larger and smaller."; DiagramViewModel = new DiagramViewModel(); - DiagramViewModel.PageSizeType = PageSizeType.Custom; - DiagramViewModel.PageSize = new Size(double.NaN, double.NaN); DiagramViewModel.ColorViewModel = new ColorViewModel(); DiagramViewModel.ColorViewModel.FillColor.Color = System.Windows.Media.Colors.Orange; + DiagramViewModel.DefaultZoomBox = true; DefaultDesignerItemViewModel node1 = new DefaultDesignerItemViewModel(DiagramViewModel) { Left = 50, Top = 50, Text = "1" }; DiagramViewModel.DirectAddItemCommand.Execute(node1); diff --git a/AIStudio.Wpf.DiagramDesigner.Demo/Views/ZoomView.xaml b/AIStudio.Wpf.DiagramDesigner.Demo/Views/ZoomView.xaml index 61db525..acce3fe 100644 --- a/AIStudio.Wpf.DiagramDesigner.Demo/Views/ZoomView.xaml +++ b/AIStudio.Wpf.DiagramDesigner.Demo/Views/ZoomView.xaml @@ -11,19 +11,6 @@ - - diff --git a/AIStudio.Wpf.DiagramDesigner/Controls/ZoomBox.cs b/AIStudio.Wpf.DiagramDesigner/Controls/ZoomBox.cs index 05c5902..32788f5 100644 --- a/AIStudio.Wpf.DiagramDesigner/Controls/ZoomBox.cs +++ b/AIStudio.Wpf.DiagramDesigner/Controls/ZoomBox.cs @@ -80,6 +80,20 @@ namespace AIStudio.Wpf.DiagramDesigner #endregion + public static readonly DependencyProperty OffSetProperty = + DependencyProperty.Register(nameof(OffSet), typeof(bool), typeof(ZoomBox), new UIPropertyMetadata(false)); + public bool OffSet + { + get + { + return (bool)GetValue(OffSetProperty); + } + set + { + SetValue(OffSetProperty, value); + } + } + public static readonly DependencyProperty ZoomValueProperty = DependencyProperty.Register(nameof(ZoomValue), typeof(double), typeof(ZoomBox), new UIPropertyMetadata(1d)); public double ZoomValue @@ -200,18 +214,36 @@ namespace AIStudio.Wpf.DiagramDesigner private void InvalidateScale(out double scale, out double xOffset, out double yOffset) { - Vector vector = System.Windows.Media.VisualTreeHelper.GetOffset(DesignerCanvas); - double w = DesignerCanvas.ActualWidth + vector.X * 2; - double h = DesignerCanvas.ActualHeight + vector.Y * 2; + if (OffSet) + { + Vector vector = System.Windows.Media.VisualTreeHelper.GetOffset(DesignerCanvas); + double w = DesignerCanvas.ActualWidth + vector.X * 2; + double h = DesignerCanvas.ActualHeight + vector.Y * 2; - // zoom canvas size - double x = this.zoomCanvas.ActualWidth; - double y = this.zoomCanvas.ActualHeight; - double scaleX = x / w; - double scaleY = y / h; - scale = (scaleX < scaleY) ? scaleX : scaleY; - xOffset = (x - scale * w) / 2; - yOffset = (y - scale * h) / 2; + // zoom canvas size + double x = this.zoomCanvas.ActualWidth; + double y = this.zoomCanvas.ActualHeight; + double scaleX = x / w; + double scaleY = y / h; + scale = (scaleX < scaleY) ? scaleX : scaleY; + xOffset = (x - scale * w) / 2; + yOffset = (y - scale * h) / 2; + } + else + { + double w = DesignerCanvas.ActualWidth; + double h = DesignerCanvas.ActualHeight; + + // zoom canvas size + double x = this.zoomCanvas.ActualWidth; + double y = this.zoomCanvas.ActualHeight; + double scaleX = x / w; + double scaleY = y / h; + scale = (scaleX < scaleY) ? scaleX : scaleY; + xOffset = (x - scale * w) / 2; + yOffset = (y - scale * h) / 2; + } + } } } diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml index 4bfa3a5..4441b6d 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml @@ -25,7 +25,7 @@ - + - - - - + + + + + + + + + + + - - + - - - - + + + + - - - + + - - + - - - - - + + + + + - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - + + - - - + + - - - + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + - - + - - - - - - - - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + - - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + + + + + - - + + + + + + + + + + - - - + + + + + + + diff --git a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml.cs b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml.cs index ed76903..244d7bc 100644 --- a/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml.cs +++ b/AIStudio.Wpf.DiagramDesigner/UserControls/DiagramControl.xaml.cs @@ -56,25 +56,6 @@ namespace AIStudio.Wpf.DiagramDesigner } } - public static readonly DependencyProperty ZoomValueProperty = DependencyProperty.Register(nameof(ZoomValue), typeof(double), typeof(DiagramControl), new UIPropertyMetadata(1d)); - public double ZoomValue - { - get - { - return (double)GetValue(ZoomValueProperty); - } - set - { - SetValue(ZoomValueProperty, value); - } - } - - private void DesignerCanvas_Loaded(object sender, RoutedEventArgs e) - { - //DesignerCanvas myDesignerCanvas = sender as DesignerCanvas; - //zoomBox.DesignerCanvas = myDesignerCanvas; - } - private IDiagramViewModel DiagramViewModel { get diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs index 425656d..21b82f1 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/BaseViewModel/DiagramViewModel.cs @@ -428,6 +428,19 @@ namespace AIStudio.Wpf.DiagramDesigner } } + private bool _defaultZoomBox; + public bool DefaultZoomBox + { + get + { + return _defaultZoomBox; + } + set + { + SetProperty(ref _defaultZoomBox, value); + } + } + private double _delayZoomValue = 1; [Browsable(false)] public double DelayZoomValue diff --git a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs index 1ef133f..e76f694 100644 --- a/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs +++ b/AIStudio.Wpf.DiagramDesigner/ViewModels/IDiagramViewModel.cs @@ -265,6 +265,10 @@ namespace AIStudio.Wpf.DiagramDesigner { get; set; } + bool DefaultZoomBox + { + get; set; + } bool AllowDrop { get; set;