首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在WPF中指定画布上椭圆形状的位置?

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

Stack Overflow用户
提问于 2011-04-08 08:49:42
回答 3查看 55.9K关注 0票数 18

我正在以编程方式创建一个椭圆形状,但我找不到任何指定其位置的属性。Lines有X1、Y1、X2、Y2,但椭圆形状上没有Center、Position、X、Y等。我该怎么做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-08 21:07:57

在屏幕上的任意位置放置形状可能应该在Canvas Panel中完成(参见@phoog的响应)。但是如果你把它放在一个网格或其他面板中,你可以随时修改边距属性,把它放在你想要的地方。

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

代码语言:javascript
运行
复制
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;
}

我还没有检查它是否能在编译器中实现您想要的功能,但希望您能明白这一点。同样,与在非画布面板中使用边距相比,使用画布将是首选的方法,但计算左侧和顶部的相同原则仍然适用:

代码语言:javascript
运行
复制
Canvas.SetLeft(ellipse, desiredCenterX - (width/2))
Canvas.SetTop(ellipse, desiredCenterY - (height/2))
票数 23
EN

Stack Overflow用户

发布于 2011-04-08 08:57:40

Canvas.Left和Canvas.Top。这一切都在“如何画椭圆或圆”http://msdn.microsoft.com/en-us/library/ms751563.aspx文档中。

在C#代码中,语法是这样的:

代码语言:javascript
运行
复制
void CreateCanvasWithEllipse(double desiredLeft, double desiredTop)
{
    Canvas canvas = new Canvas();
    Ellipse ellipse = SomeEllipseConstructionMethod();
    Canvas.SetLeft(ellipse, desiredLeft);
    Canvas.SetTop(ellipse, desiredTop);
}
票数 15
EN

Stack Overflow用户

发布于 2013-03-15 11:11:24

如果您有起点和终点以及半径和布尔值,则使用我的函数:)

代码语言:javascript
运行
复制
function ellipse(x1, y1, x2, y2, radius, clockwise) {
    var cBx = (x1 + x2) / 2;    //get point between xy1 and xy2
    var cBy = (y1 + y2) / 2;
    var aB = Math.atan2(y1 - y2, x1 - x2);  //get angle to bulge point in radians
    if (clockwise) { aB += (90 * (Math.PI / 180)); }
    else { aB -= (90 * (Math.PI / 180)); }
    var op_side = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) / 2;
    var adj_side = Math.sqrt(Math.pow(radius, 2) - Math.pow(op_side, 2));

    if (isNaN(adj_side)) {
        adj_side = Math.sqrt(Math.pow(op_side, 2) - Math.pow(radius, 2));
    }

    var Cx = cBx + (adj_side * Math.cos(aB));            
    var Cy = cBy + (adj_side * Math.sin(aB));
    var startA = Math.atan2(y1 - Cy, x1 - Cx);       //get start/end angles in radians
    var endA = Math.atan2(y2 - Cy, x2 - Cx);
    var mid = (startA + endA) / 2;
    var Mx = Cx + (radius * Math.cos(mid));
    var My = Cy + (radius * Math.sin(mid));
    context.arc(Cx, Cy, radius, startA, endA, clockwise);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5589256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档