mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-13 04:59:26 +08:00
ZoomBox待完成,还需要调整
This commit is contained in:
@@ -4,6 +4,7 @@ using System.Windows.Controls;
|
||||
using System.Windows.Controls.Primitives;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Input;
|
||||
using AIStudio.Wpf.DiagramDesigner.Helpers;
|
||||
|
||||
namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
@@ -12,7 +13,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
private Thumb zoomThumb;
|
||||
private Canvas zoomCanvas;
|
||||
private Slider zoomSlider;
|
||||
private ScaleTransform scaleTransform;
|
||||
|
||||
#region DPs
|
||||
|
||||
@@ -24,7 +24,24 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty ScrollViewerProperty =
|
||||
DependencyProperty.Register(nameof(ScrollViewer), typeof(ScrollViewer), typeof(ZoomBox));
|
||||
DependencyProperty.Register(nameof(ScrollViewer), typeof(ScrollViewer), typeof(ZoomBox), new FrameworkPropertyMetadata(null,
|
||||
new PropertyChangedCallback(OnScrollViewerChanged)));
|
||||
|
||||
private static void OnScrollViewerChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
ZoomBox target = (ZoomBox)d;
|
||||
ScrollViewer oldvalue = (ScrollViewer)e.OldValue;
|
||||
ScrollViewer newvalue = (ScrollViewer)e.NewValue;
|
||||
target.OnScrollViewerChanged(oldvalue, newvalue);
|
||||
}
|
||||
|
||||
protected virtual void OnScrollViewerChanged(ScrollViewer oldvalue, ScrollViewer newvalue)
|
||||
{
|
||||
if (newvalue != null)
|
||||
{
|
||||
DesignerCanvas = VisualHelper.FindChild<DesignerCanvas>(newvalue);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region DesignerCanvas
|
||||
@@ -56,20 +73,33 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
{
|
||||
if (oldDesignerCanvas != null)
|
||||
{
|
||||
newDesignerCanvas.LayoutUpdated -= new EventHandler(this.DesignerCanvas_LayoutUpdated);
|
||||
newDesignerCanvas.MouseWheel -= new MouseWheelEventHandler(this.DesignerCanvas_MouseWheel);
|
||||
oldDesignerCanvas.LayoutUpdated -= new EventHandler(this.DesignerCanvas_LayoutUpdated);
|
||||
oldDesignerCanvas.MouseWheel -= new MouseWheelEventHandler(this.DesignerCanvas_MouseWheel);
|
||||
}
|
||||
|
||||
if (newDesignerCanvas != null)
|
||||
{
|
||||
newDesignerCanvas.LayoutUpdated += new EventHandler(this.DesignerCanvas_LayoutUpdated);
|
||||
newDesignerCanvas.MouseWheel += new MouseWheelEventHandler(this.DesignerCanvas_MouseWheel);
|
||||
newDesignerCanvas.LayoutTransform = this.scaleTransform;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public static readonly DependencyProperty ZoomValueProperty =
|
||||
DependencyProperty.Register(nameof(ZoomValue), typeof(double), typeof(ZoomBox), new UIPropertyMetadata(1d));
|
||||
public double ZoomValue
|
||||
{
|
||||
get
|
||||
{
|
||||
return (double)GetValue(ZoomValueProperty);
|
||||
}
|
||||
set
|
||||
{
|
||||
SetValue(ZoomValueProperty, value);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public override void OnApplyTemplate()
|
||||
@@ -79,6 +109,8 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
if (this.ScrollViewer == null)
|
||||
return;
|
||||
|
||||
DesignerCanvas = VisualHelper.FindChild<DesignerCanvas>(this.ScrollViewer);
|
||||
|
||||
this.zoomThumb = Template.FindName("PART_ZoomThumb", this) as Thumb;
|
||||
if (this.zoomThumb == null)
|
||||
throw new Exception("PART_ZoomThumb template is missing!");
|
||||
@@ -93,7 +125,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
this.zoomThumb.DragDelta += new DragDeltaEventHandler(this.Thumb_DragDelta);
|
||||
this.zoomSlider.ValueChanged += new RoutedPropertyChangedEventHandler<double>(this.ZoomSlider_ValueChanged);
|
||||
this.scaleTransform = new ScaleTransform();
|
||||
}
|
||||
|
||||
private void ZoomSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
|
||||
@@ -103,8 +134,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
double newVerticalOffset = ((this.ScrollViewer.VerticalOffset + halfViewportHeight) * scale - halfViewportHeight);
|
||||
double halfViewportWidth = this.ScrollViewer.ViewportWidth / 2;
|
||||
double newHorizontalOffset = ((this.ScrollViewer.HorizontalOffset + halfViewportWidth) * scale - halfViewportWidth);
|
||||
this.scaleTransform.ScaleX *= scale;
|
||||
this.scaleTransform.ScaleY *= scale;
|
||||
this.ScrollViewer.ScrollToHorizontalOffset(newHorizontalOffset);
|
||||
this.ScrollViewer.ScrollToVerticalOffset(newVerticalOffset);
|
||||
}
|
||||
@@ -145,8 +174,8 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void InvalidateScale(out double scale, out double xOffset, out double yOffset)
|
||||
{
|
||||
double w = DesignerCanvas.ActualWidth * this.scaleTransform.ScaleX;
|
||||
double h = DesignerCanvas.ActualHeight * this.scaleTransform.ScaleY;
|
||||
double w = DesignerCanvas.ActualWidth * ZoomValue;
|
||||
double h = DesignerCanvas.ActualHeight * ZoomValue;
|
||||
|
||||
// zoom canvas size
|
||||
double x = this.zoomCanvas.ActualWidth;
|
||||
|
||||
Reference in New Issue
Block a user