在WPF画布上添加ArcSegment

时间:2014-10-20 16:26:52

标签: c# wpf debugging canvas

我正在尝试向WPF画布添加圆角矩形。我在几种方式中阅读了使用矩形的方法,但它们通常是添加UI元素,例如使用LineGeometry,而不是WPF画布上的对象。

有人可以帮我解决如何处理ArcSegment类以将其添加到画布中的方式与添加线条相同吗?

例如,当使用一行时:

首先我定义线参数

Line botLine = new Line();
botLine.X1 = x + width - radius;
botLine.Y1 = y;
botLine.X2 = x + radius;
botLine.Y2 = y;

然后我可以像这样在画布上添加这行:

canvas1.Children.Add(botLine);

但我无法使用相同的方法添加ArcSegment。在这种情况下会采取什么方法?还有一种方法可以在一个实体中将线和弧连接在一起吗?

1 个答案:

答案 0 :(得分:2)

您无法将ArcSegment添加到Canvas,因为它不是Shape;它是几何API的一部分,表示基于路径的几何体中的弧,但它不是您通常直接使用的类。

没有Shape直接对应于'但您可以为其几何体创建一个带有单个弧的Path。在C#中执行此操作的最简单方法是使用StreamingGeometry作为路径数据:

var g = new StreamGeometry();

using (var gc = g.Open())
{
    gc.BeginFigure(
        startPoint: new Point(0, 0), 
        isFilled: false, 
        isClosed: false);

    gc.ArcTo(
        point: new Point(100, 100),
        size: new Size(100, 100),
        rotationAngle: 0d,
        isLargeArc: false,
        sweepDirection: SweepDirection.Clockwise,
        isStroked: true,
        isSmoothJoin: false);
}

var path = new Path
           {
               Stroke = Brushes.Black,
               StrokeThickness = 2,
               Data = g
           };

canvas1.Children.Add(path);

根据需要调整参数以适合您的使用案例。要了解如何在XAML中声明路径几何,请参阅WPF&#39}路径标记语法this MSDN article