Skip to content

Commit 247b102

Browse files
committed
#78 Add to obtain the current angle
Add to obtain the current angle #78
1 parent 86b27f1 commit 247b102

File tree

3 files changed

+57
-8
lines changed

3 files changed

+57
-8
lines changed

src/WPFDevelopers.Samples.Shared/Controls/ElementAdorner/ElementAdorner.cs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.ComponentModel;
3+
using System.Diagnostics;
34
using System.Windows;
45
using System.Windows.Controls;
56
using System.Windows.Controls.Primitives;
@@ -14,6 +15,29 @@ namespace WPFDevelopers.Samples.Controls
1415
{
1516
public class ElementAdorner : Adorner
1617
{
18+
public event RoutedPropertyChangedEventHandler<double> AngleChanged;
19+
20+
protected virtual void OnAngleChanged(double oldValue, double newValue)
21+
{
22+
RoutedPropertyChangedEventArgs<double> args = new RoutedPropertyChangedEventArgs<double>(oldValue, newValue);
23+
AngleChanged?.Invoke(this, args);
24+
}
25+
26+
private double angle;
27+
public double Angle
28+
{
29+
get { return angle; }
30+
set
31+
{
32+
if (angle != value)
33+
{
34+
double oldValue = angle;
35+
angle = value;
36+
OnAngleChanged(oldValue, angle);
37+
}
38+
}
39+
}
40+
1741
private const double ThumbSize = 16, ElementMiniSize = 20;
1842
private const double RotateThumbSize = 20;
1943
private readonly Thumb tLeft;
@@ -244,7 +268,7 @@ private Thumb CreateRotateThumb()
244268
return thumb;
245269
}
246270

247-
271+
248272
private Brush GetFactoryRotate()
249273
{
250274
var lan =
@@ -262,9 +286,8 @@ private void Thumb_DragDelta(object sender, DragDeltaEventArgs e)
262286
{
263287
var currentPoint = Mouse.GetPosition(canvas);
264288
var deltaVector = Point.Subtract(currentPoint, centerPoint);
265-
266289
var angle = Vector.AngleBetween(startVector, deltaVector);
267-
290+
Angle = angle;
268291
var rotateTransform = designerItem.RenderTransform as RotateTransform;
269292
rotateTransform.Angle = initialAngle + Math.Round(angle, 0);
270293
designerItem.InvalidateMeasure();
@@ -293,9 +316,7 @@ private void Thumb_DragStarted(object sender, DragStartedEventArgs e)
293316
initialAngle = 0;
294317
}
295318
else
296-
{
297319
initialAngle = rotateTransform.Angle;
298-
}
299320
}
300321
}
301322
}

src/WPFDevelopers.Samples.Shared/Controls/ElementAdorner/TransformThumb.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
11
using System.Windows;
22
using System.Windows.Controls;
33
using System.Windows.Documents;
4+
using System.Xml.Linq;
45

56
namespace WPFDevelopers.Samples.Controls
67
{
78
public class TransformThumb : ContentControl
89
{
10+
public double Angle
11+
{
12+
get { return (double)GetValue(AngleProperty); }
13+
set { SetValue(AngleProperty, value); }
14+
}
15+
public static readonly DependencyProperty AngleProperty =
16+
DependencyProperty.Register("Angle", typeof(double), typeof(TransformThumb), new PropertyMetadata(0d, OnAngleChanged));
17+
18+
private static void OnAngleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
19+
{
20+
21+
}
922
static TransformThumb()
1023
{
1124
DefaultStyleKeyProperty.OverrideMetadata(typeof(TransformThumb), new FrameworkPropertyMetadata(typeof(TransformThumb)));
@@ -21,10 +34,23 @@ void CreateAdorner()
2134
var adornerLayer = AdornerLayer.GetAdornerLayer(this);
2235
if (adornerLayer != null)
2336
{
37+
var adorners = adornerLayer.GetAdorners(this);
38+
if (adorners != null)
39+
foreach (var item in adorners)
40+
if (item is ElementAdorner container)
41+
adornerLayer.Remove(container);
2442
var adorner = new ElementAdorner(this);
43+
adorner.AngleChanged -= Adorner_AngleChanged;
44+
adorner.AngleChanged += Adorner_AngleChanged;
2545
adornerLayer.Add(adorner);
2646
}
2747
}
48+
49+
private void Adorner_AngleChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
50+
{
51+
Angle = e.NewValue;
52+
}
53+
2854
private void TransformThumb_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
2955
{
3056
if (e.NewValue is bool isVisible)

src/WPFDevelopers.Samples.Shared/ExampleViews/TransformThumbExample.xaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,15 @@
2727
Canvas.Left="305"
2828
Canvas.Top="205"
2929
Width="280"
30-
Height="100">
30+
Height="100" x:Name="MyTransformThumb">
3131
<TextBlock
3232
HorizontalAlignment="Center"
3333
VerticalAlignment="Center"
3434
FontSize="40"
35-
Foreground="White"
36-
Text="WPF开发者" />
35+
Foreground="White">
36+
<Run>WPF开发者</Run>
37+
<Run Text="{Binding ElementName=MyTransformThumb,Path=Angle,StringFormat=0.00}"></Run>
38+
</TextBlock>
3739
</controls:TransformThumb>
3840
<controls:TransformThumb
3941
Canvas.Left="100"

0 commit comments

Comments
 (0)