mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-04-29 04:33:23 +08:00
ZoomBox 完成
This commit is contained in:
@@ -1900,7 +1900,9 @@
|
|||||||
Width="180"
|
Width="180"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
VerticalAlignment="Bottom"
|
VerticalAlignment="Bottom"
|
||||||
ScrollViewer="{Binding ElementName=designerScrollViewer}"
|
DesignerCanvas="{Binding ElementName=diagram}"
|
||||||
|
MaximumZoomValue="{Binding MaximumZoomValue,Mode=TwoWay}"
|
||||||
|
MinimumZoomValue="{Binding MinimumZoomValue,Mode=TwoWay}"
|
||||||
ZoomValue="{Binding ZoomValue,Mode=TwoWay}"
|
ZoomValue="{Binding ZoomValue,Mode=TwoWay}"
|
||||||
Margin="0,0,5,5" />
|
Margin="0,0,5,5" />
|
||||||
</Grid>
|
</Grid>
|
||||||
@@ -2062,9 +2064,9 @@
|
|||||||
<Fluent:StatusBarItem Title="Zoom Slider"
|
<Fluent:StatusBarItem Title="Zoom Slider"
|
||||||
HorizontalAlignment="Right">
|
HorizontalAlignment="Right">
|
||||||
<Slider x:Name="zoomSlider"
|
<Slider x:Name="zoomSlider"
|
||||||
Minimum="0.5"
|
Minimum="{Binding PageViewModel.DiagramViewModel.MinimumZoomValue}"
|
||||||
Value="{Binding PageViewModel.DiagramViewModel.ZoomValue}"
|
Value="{Binding PageViewModel.DiagramViewModel.ZoomValue}"
|
||||||
Maximum="2.0"
|
Maximum="{Binding PageViewModel.DiagramViewModel.MaximumZoomValue}"
|
||||||
IsDirectionReversed="False"
|
IsDirectionReversed="False"
|
||||||
Style="{DynamicResource ZoomSliderStyle}"
|
Style="{DynamicResource ZoomSliderStyle}"
|
||||||
IsSnapToTickEnabled="True"
|
IsSnapToTickEnabled="True"
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
private Thumb zoomThumb;
|
private Thumb zoomThumb;
|
||||||
private Canvas zoomCanvas;
|
private Canvas zoomCanvas;
|
||||||
private Slider zoomSlider;
|
private Slider zoomSlider;
|
||||||
private DiagramControl diagramControl;
|
|
||||||
|
|
||||||
#region DPs
|
#region DPs
|
||||||
|
|
||||||
@@ -34,20 +33,20 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
DependencyProperty.Register(nameof(ScrollViewer), typeof(ScrollViewer), typeof(ZoomBox));
|
DependencyProperty.Register(nameof(ScrollViewer), typeof(ScrollViewer), typeof(ZoomBox));
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region DesignerCanvas
|
#region FrameworkElement
|
||||||
|
|
||||||
|
|
||||||
public static readonly DependencyProperty DesignerCanvasProperty =
|
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 FrameworkPropertyMetadata(null,
|
||||||
new PropertyChangedCallback(OnDesignerCanvasChanged)));
|
new PropertyChangedCallback(OnDesignerCanvasChanged)));
|
||||||
|
|
||||||
|
|
||||||
public DesignerCanvas DesignerCanvas
|
public FrameworkElement DesignerCanvas
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return (DesignerCanvas)GetValue(DesignerCanvasProperty);
|
return (FrameworkElement)GetValue(DesignerCanvasProperty);
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
@@ -55,17 +54,16 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void OnDesignerCanvasChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
private static void OnDesignerCanvasChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||||
{
|
{
|
||||||
ZoomBox target = (ZoomBox)d;
|
ZoomBox target = (ZoomBox)d;
|
||||||
DesignerCanvas oldDesignerCanvas = (DesignerCanvas)e.OldValue;
|
FrameworkElement oldDesignerCanvas = (FrameworkElement)e.OldValue;
|
||||||
DesignerCanvas newDesignerCanvas = (DesignerCanvas)e.NewValue;
|
FrameworkElement newDesignerCanvas = (FrameworkElement)e.NewValue;
|
||||||
target.OnDesignerCanvasChanged(oldDesignerCanvas, newDesignerCanvas);
|
target.OnDesignerCanvasChanged(oldDesignerCanvas, newDesignerCanvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected virtual void OnDesignerCanvasChanged(DesignerCanvas oldDesignerCanvas, DesignerCanvas newDesignerCanvas)
|
protected virtual void OnDesignerCanvasChanged(FrameworkElement oldDesignerCanvas, FrameworkElement newDesignerCanvas)
|
||||||
{
|
{
|
||||||
if (oldDesignerCanvas != null)
|
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
|
#endregion
|
||||||
|
|
||||||
public override void OnApplyTemplate()
|
public override void OnApplyTemplate()
|
||||||
{
|
{
|
||||||
base.OnApplyTemplate();
|
base.OnApplyTemplate();
|
||||||
|
|
||||||
|
this.ScrollViewer = VisualHelper.TryFindParent<ScrollViewer>(this.DesignerCanvas);
|
||||||
if (this.ScrollViewer == null)
|
if (this.ScrollViewer == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DesignerCanvas = VisualHelper.FindChild<DesignerCanvas>(this.ScrollViewer);
|
|
||||||
|
|
||||||
diagramControl = VisualHelper.FindChild<DiagramControl>(this.ScrollViewer);
|
|
||||||
|
|
||||||
this.zoomThumb = Template.FindName("PART_ZoomThumb", this) as Thumb;
|
this.zoomThumb = Template.FindName("PART_ZoomThumb", this) as Thumb;
|
||||||
if (this.zoomThumb == null)
|
if (this.zoomThumb == null)
|
||||||
throw new Exception("PART_ZoomThumb template is missing!");
|
throw new Exception("PART_ZoomThumb template is missing!");
|
||||||
@@ -162,6 +184,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
|
|
||||||
private void DesignerCanvas_MouseWheel(object sender, EventArgs e)
|
private void DesignerCanvas_MouseWheel(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
if (Keyboard.IsKeyDown(Key.LeftCtrl) == false
|
||||||
|
&& Keyboard.IsKeyDown(Key.RightCtrl) == false)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
MouseWheelEventArgs wheel = (MouseWheelEventArgs)e;
|
MouseWheelEventArgs wheel = (MouseWheelEventArgs)e;
|
||||||
|
|
||||||
//divide the value by 10 so that it is more smooth
|
//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)
|
private void InvalidateScale(out double scale, out double xOffset, out double yOffset)
|
||||||
{
|
{
|
||||||
Vector vector = System.Windows.Media.VisualTreeHelper.GetOffset(diagramControl);
|
Vector vector = System.Windows.Media.VisualTreeHelper.GetOffset(DesignerCanvas);
|
||||||
double w = DesignerCanvas.ActualWidth * ZoomValue + vector.X * 2;
|
double w = DesignerCanvas.ActualWidth + vector.X * 2;
|
||||||
double h = DesignerCanvas.ActualHeight * ZoomValue + vector.Y * 2;
|
double h = DesignerCanvas.ActualHeight + vector.Y * 2;
|
||||||
|
|
||||||
// zoom canvas size
|
// zoom canvas size
|
||||||
double x = this.zoomCanvas.ActualWidth;
|
double x = this.zoomCanvas.ActualWidth;
|
||||||
|
|||||||
@@ -210,8 +210,8 @@
|
|||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Slider Name="PART_ZoomSlider"
|
<Slider Name="PART_ZoomSlider"
|
||||||
Ticks="0.25,0.50,0.75,1,1.25,1.50,2.00,3.00,4.00,5.00"
|
Ticks="0.25,0.50,0.75,1,1.25,1.50,2.00,3.00,4.00,5.00"
|
||||||
Minimum="0.25"
|
Minimum="{Binding MinimumZoomValue,RelativeSource={RelativeSource Mode=TemplatedParent},Mode=TwoWay}"
|
||||||
Maximum="5"
|
Maximum="{Binding MaximumZoomValue,RelativeSource={RelativeSource Mode=TemplatedParent},Mode=TwoWay}"
|
||||||
SmallChange="0.25"
|
SmallChange="0.25"
|
||||||
LargeChange="0.25"
|
LargeChange="0.25"
|
||||||
Value="{Binding ZoomValue,RelativeSource={RelativeSource Mode=TemplatedParent},Mode=TwoWay}"
|
Value="{Binding ZoomValue,RelativeSource={RelativeSource Mode=TemplatedParent},Mode=TwoWay}"
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
|
|
||||||
var newZoomValue = DiagramViewModel.ZoomValue + (e.Delta > 0 ? 0.1 : -0.1);
|
var newZoomValue = DiagramViewModel.ZoomValue + (e.Delta > 0 ? 0.1 : -0.1);
|
||||||
|
|
||||||
DiagramViewModel.ZoomValue = Math.Max(Math.Min(newZoomValue, 10), 0.5);
|
DiagramViewModel.ZoomValue = Math.Max(Math.Min(newZoomValue, DiagramViewModel.MaximumZoomValue), DiagramViewModel.MinimumZoomValue);
|
||||||
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -400,6 +400,34 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private double _maximumZoomValue = 3;
|
||||||
|
[Browsable(false)]
|
||||||
|
public double MaximumZoomValue
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _maximumZoomValue;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetProperty(ref _maximumZoomValue, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private double _minimumZoomValue = 0.5;
|
||||||
|
[Browsable(false)]
|
||||||
|
public double MinimumZoomValue
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _minimumZoomValue;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
SetProperty(ref _minimumZoomValue, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private double _delayZoomValue = 1;
|
private double _delayZoomValue = 1;
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
public double DelayZoomValue
|
public double DelayZoomValue
|
||||||
|
|||||||
@@ -257,6 +257,14 @@ namespace AIStudio.Wpf.DiagramDesigner
|
|||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
}
|
}
|
||||||
|
double MaximumZoomValue
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
|
double MinimumZoomValue
|
||||||
|
{
|
||||||
|
get; set;
|
||||||
|
}
|
||||||
bool AllowDrop
|
bool AllowDrop
|
||||||
{
|
{
|
||||||
get; set;
|
get; set;
|
||||||
|
|||||||
Reference in New Issue
Block a user