mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-20 16:36:36 +08:00
ZoomBox 完成
This commit is contained in:
@@ -13,7 +13,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
private Thumb zoomThumb;
|
||||
private Canvas zoomCanvas;
|
||||
private Slider zoomSlider;
|
||||
private DiagramControl diagramControl;
|
||||
|
||||
#region DPs
|
||||
|
||||
@@ -34,20 +33,20 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
DependencyProperty.Register(nameof(ScrollViewer), typeof(ScrollViewer), typeof(ZoomBox));
|
||||
#endregion
|
||||
|
||||
#region DesignerCanvas
|
||||
#region FrameworkElement
|
||||
|
||||
|
||||
public static readonly DependencyProperty DesignerCanvasProperty =
|
||||
DependencyProperty.Register(nameof(DesignerCanvas), typeof(DesignerCanvas), typeof(ZoomBox),
|
||||
DependencyProperty.Register(nameof(DesignerCanvas), typeof(FrameworkElement), typeof(ZoomBox),
|
||||
new FrameworkPropertyMetadata(null,
|
||||
new PropertyChangedCallback(OnDesignerCanvasChanged)));
|
||||
|
||||
|
||||
public DesignerCanvas DesignerCanvas
|
||||
public FrameworkElement DesignerCanvas
|
||||
{
|
||||
get
|
||||
{
|
||||
return (DesignerCanvas)GetValue(DesignerCanvasProperty);
|
||||
return (FrameworkElement)GetValue(DesignerCanvasProperty);
|
||||
}
|
||||
set
|
||||
{
|
||||
@@ -55,17 +54,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void OnDesignerCanvasChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
ZoomBox target = (ZoomBox)d;
|
||||
DesignerCanvas oldDesignerCanvas = (DesignerCanvas)e.OldValue;
|
||||
DesignerCanvas newDesignerCanvas = (DesignerCanvas)e.NewValue;
|
||||
FrameworkElement oldDesignerCanvas = (FrameworkElement)e.OldValue;
|
||||
FrameworkElement newDesignerCanvas = (FrameworkElement)e.NewValue;
|
||||
target.OnDesignerCanvasChanged(oldDesignerCanvas, newDesignerCanvas);
|
||||
}
|
||||
|
||||
|
||||
protected virtual void OnDesignerCanvasChanged(DesignerCanvas oldDesignerCanvas, DesignerCanvas newDesignerCanvas)
|
||||
protected virtual void OnDesignerCanvasChanged(FrameworkElement oldDesignerCanvas, FrameworkElement newDesignerCanvas)
|
||||
{
|
||||
if (oldDesignerCanvas != null)
|
||||
{
|
||||
@@ -96,19 +94,43 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
}
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty MaximumZoomValueProperty =
|
||||
DependencyProperty.Register(nameof(MaximumZoomValue), typeof(double), typeof(ZoomBox), new UIPropertyMetadata(3d));
|
||||
public double MaximumZoomValue
|
||||
{
|
||||
get
|
||||
{
|
||||
return (double)GetValue(MaximumZoomValueProperty);
|
||||
}
|
||||
set
|
||||
{
|
||||
SetValue(MaximumZoomValueProperty, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static readonly DependencyProperty MinimumZoomValueProperty =
|
||||
DependencyProperty.Register(nameof(MinimumZoomValue), typeof(double), typeof(ZoomBox), new UIPropertyMetadata(0.5d));
|
||||
public double MinimumZoomValue
|
||||
{
|
||||
get
|
||||
{
|
||||
return (double)GetValue(MinimumZoomValueProperty);
|
||||
}
|
||||
set
|
||||
{
|
||||
SetValue(MinimumZoomValueProperty, value);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public override void OnApplyTemplate()
|
||||
{
|
||||
base.OnApplyTemplate();
|
||||
|
||||
this.ScrollViewer = VisualHelper.TryFindParent<ScrollViewer>(this.DesignerCanvas);
|
||||
if (this.ScrollViewer == null)
|
||||
return;
|
||||
|
||||
DesignerCanvas = VisualHelper.FindChild<DesignerCanvas>(this.ScrollViewer);
|
||||
|
||||
diagramControl = VisualHelper.FindChild<DiagramControl>(this.ScrollViewer);
|
||||
|
||||
this.zoomThumb = Template.FindName("PART_ZoomThumb", this) as Thumb;
|
||||
if (this.zoomThumb == null)
|
||||
throw new Exception("PART_ZoomThumb template is missing!");
|
||||
@@ -162,6 +184,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void DesignerCanvas_MouseWheel(object sender, EventArgs e)
|
||||
{
|
||||
if (Keyboard.IsKeyDown(Key.LeftCtrl) == false
|
||||
&& Keyboard.IsKeyDown(Key.RightCtrl) == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
MouseWheelEventArgs wheel = (MouseWheelEventArgs)e;
|
||||
|
||||
//divide the value by 10 so that it is more smooth
|
||||
@@ -172,9 +200,9 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
private void InvalidateScale(out double scale, out double xOffset, out double yOffset)
|
||||
{
|
||||
Vector vector = System.Windows.Media.VisualTreeHelper.GetOffset(diagramControl);
|
||||
double w = DesignerCanvas.ActualWidth * ZoomValue + vector.X * 2;
|
||||
double h = DesignerCanvas.ActualHeight * ZoomValue + vector.Y * 2;
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user