C# 单击时自定义形状绘制不正确
图形绘制不正确或根本不正确-也就是说,如果我朝画布左上角单击,它将绘制椭圆,但不会在其他任何地方。代码在逻辑上正确吗?一切似乎都很好,但也许我错过了什么C# 单击时自定义形状绘制不正确,c#,wpf,C#,Wpf,图形绘制不正确或根本不正确-也就是说,如果我朝画布左上角单击,它将绘制椭圆,但不会在其他任何地方。代码在逻辑上正确吗?一切似乎都很好,但也许我错过了什么 /* in mainwindow.xaml */ private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (btnNode.IsChecked == true) {
/* in mainwindow.xaml */
private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (btnNode.IsChecked == true)
{
CreateNode(e.GetPosition(Canvas));
}
}
private void CreateNode(Point origin)
{
Node n = new Node("new_" + cmbStart.Items.Count, origin) { Fill = new SolidColorBrush(Colors.Tomato), Width = 60, Height = 60 };
Canvas.Children.Add(n);
Canvas.SetLeft(n, origin.X - n.Width/2);
Canvas.SetTop(n, origin.Y - n.Height/2);
}
/* in Node class */
private void Init(Point p)
{
X = p.X;
Y = p.Y;
}
public double Y
{
get { return (double)this.GetValue(YProperty); }
set { this.SetValue(YProperty, value); }
}
public double X
{
get { return (double) this.GetValue(XProperty); }
set { this.SetValue(XProperty, value); }
}
public static readonly DependencyProperty XProperty = DependencyProperty.Register("X", typeof(double), typeof(Node), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty YProperty = DependencyProperty.Register("Y", typeof(double), typeof(Node), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender));
protected override Geometry DefiningGeometry
{
get
{
Console.WriteLine("rendering at: " + this.X + ", " + this.Y + "---Scale: " + Width);
return new EllipseGeometry(new Point(this.X, this.Y), Width, Height);
}
}
EllipseGeometry
构造函数有radiusX
和radiusY
参数来传递半径,而不是直径
如果要在自定义控件的边界中绘制完整的椭圆,应使用Width/2
和Height/2
作为参数值:
protected override Geometry DefiningGeometry
{
get
{
return new EllipseGeometry(new Point(X, Y), Width / 2, Height / 2);
}
}
不要同时设置椭圆曲线和Canvas.Left/Canvas.Top的中心点。设置一个或另一个。也不起作用。画布的左上角似乎有一个正方形,我在我的原始帖子中上传了一张图片。