如何在WPF中指定画布上椭圆形状的位置?

Joa*_*nge 16 .net c# wpf graphics shapes

我以编程方式创建椭圆形状但我找不到任何指定其位置的属性.Lines具有X1,Y1,X2,Y2,但椭圆形状上没有中心,位置,X,Y等.我怎样才能做到这一点?

vig*_*ity 21

将形状放在屏幕上的任意位置应该可以在Canvas面板中完成(参见@phoog的回复).但是,如果您将其放置在网格或其他面板中,则可以始终修改Margin属性以将其放置在您想要的位置.

如果您想通过指定中心点而不是椭圆的左上角来执行此操作,则可以执行以下操作:

Ellipse CreateEllipse(double width, double height, double desiredCenterX, double desiredCenterY)
{
    Ellipse ellipse = new Ellipse { Width = width, Height = height };
    double left = desiredCenterX - (width / 2);
    double top  = desiredCenterY - (height/ 2);

    ellipse.Margin = new Thickness(left, top, 0, 0);
    return ellipse;
}
Run Code Online (Sandbox Code Playgroud)

我没有检查过这在编译器中完全符合您的要求,但希望您能得到这个想法.同样,使用Canvas是在非Canvas面板中使用Margin的首选方法,但计算left和top的原理仍然适用:

Canvas.SetLeft(ellipse, desiredCenterX - (width/2))
Canvas.SetTop(ellipse, desiredCenterY - (height/2))
Run Code Online (Sandbox Code Playgroud)

  • @Kamil在这种情况下,定位是容器的属性,而不是椭圆本身。在画布中,设置Canvas.Left属性。确实很奇怪 (2认同)

pho*_*oog 14

Canvas.Left和Canvas.Top.这些都在"如何绘制椭圆或圆形"的文档中http://msdn.microsoft.com/en-us/library/ms751563.aspx

在C#代码中,语法如下:

void CreateCanvasWithEllipse(double desiredLeft, double desiredTop)
{
    Canvas canvas = new Canvas();
    Ellipse ellipse = SomeEllipseConstructionMethod();
    Canvas.SetLeft(ellipse, desiredLeft);
    Canvas.SetTop(ellipse, desiredTop);
}
Run Code Online (Sandbox Code Playgroud)