17,740
社区成员
发帖
与我相关
我的任务
分享
<my:BezierPoint x:Name="ptStart" Fill="DarkOrange" Stroke="{x:Null}" Canvas.Left="61" Canvas.Top="103" Canvas.ZIndex="10" />
BezierPoint bp = new BezierPoint();
canvas1.Children.Add(bp);
public class BezierPoint : FrameworkElement {
public Brush Fill {
get { return (Brush)GetValue(FillProperty); }
set { SetValue(FillProperty, value); }
}
public Brush Stroke {
get { return (Brush)GetValue(StrokeProperty); }
set { SetValue(StrokeProperty, value); }
}
public Point Center {
get { return (Point)GetValue(CenterProperty); }
set { SetValue(CenterProperty, value); }
}
protected override void OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e) {
base.OnMouseDown(e);
this.CaptureMouse();
last = e.GetPosition(this.Parent as Canvas);
}
protected override void OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e) {
base.OnMouseLeftButtonUp(e);
this.ReleaseMouseCapture();
}
protected override void OnMouseMove(System.Windows.Input.MouseEventArgs e) {
base.OnMouseMove(e);
if (this.IsMouseCaptured) {
Point current = e.GetPosition(this.Parent as Canvas);
Canvas.SetLeft(this, Canvas.GetLeft(this) + (current.X - last.X));
Canvas.SetTop(this, Canvas.GetTop(this) + (current.Y - last.Y));
last = current;
UpdateCenter();
}
}
protected override Size MeasureOverride(Size availableSize) {
return new Size(15, 15);
}
protected override void OnRender(DrawingContext dc) {
Size r = this.RenderSize;
dc.DrawEllipse(Fill, Stroke == null ? null : new Pen(Stroke, 3), new Point(r.Width / 2, r.Height / 2), r.Width / 2, r.Height / 2);
}
public void UpdateCenter() {
Center = new Point(Canvas.GetLeft(this) + RenderSize.Width / 2, Canvas.GetTop(this) + RenderSize.Height / 2);
}
public BezierPoint() {
this.Loaded += new RoutedEventHandler(BezierPoint_Loaded);
}
void BezierPoint_Loaded(object sender, RoutedEventArgs e) {
UpdateCenter();
}
private Point last;
public static readonly DependencyProperty FillProperty =
DependencyProperty.Register("Fill", typeof(Brush), typeof(BezierPoint), new FrameworkPropertyMetadata(Brushes.White, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty StrokeProperty =
DependencyProperty.Register("Stroke", typeof(Brush), typeof(BezierPoint), new FrameworkPropertyMetadata(Brushes.Black, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty CenterProperty =
DependencyProperty.Register("Center", typeof(Point), typeof(BezierPoint), new FrameworkPropertyMetadata(new Point(0, 0)));
}