如何在Silverlight中绘制线条指定高度?

时间:2013-08-14 13:53:25

标签: c# .net silverlight

我正在尝试在Silverlight中绘制线条指定Canvas.Left,Canvas.Top,Width,Height属性。但它没有显示出来。我在这里错过了什么?我试图在不指定坐标的情况下画线。

  Point pt1 = new Point();
            pt1.X = 50;
            pt1.Y = 50;

            Line l = new Line();
            l.Height = 5;
            l.Width = 5;
            l.SetValue(Canvas.TopProperty, pt1.Y);
            l.SetValue(Canvas.LeftProperty, pt1.X);

  this.LayoutRoot.Children.Add(l);

由于

2 个答案:

答案 0 :(得分:2)

是的,行有这种格式:

<Line X1="50" Y1="50" X2="200" Y2="200" Stroke="Red" StrokeThickness="4" />

http://www.c-sharpcorner.com/uploadfile/mahesh/line-in-wpf/

复制
Line redLine = new Line();
redLine.X1 = 50;
redLine.Y1 = 50;
redLine.X2 = 200;
redLine.Y2 = 200;

// Create a red Brush
SolidColorBrush redBrush = new SolidColorBrush();
redBrush.Color = Colors.Red;

// Set Line's width and color
redLine.StrokeThickness = 4;
redLine.Stroke = redBrush;

// Add line to the Grid.
LayoutRoot.Children.Add(redLine);

答案 1 :(得分:1)

您不能,必须指定X1X2Y1Y2。但是你可以创建帮助方法来帮助你:

public Line CreateVerticalLine(Point startPoint, double height, double thickness)
{
    Line line = new Line();

    line.X1 = startPoint.X;
    line.Y1 = startPoint.Y;
    line.X2 = startPoint.X;
    line.Y2 = startPoint.Y + height;

    line.StrokeThickness = thickness;

    return line;
}

如果您已经开始使用Canvas.TopCanvas.Left属性,则可以从其原点绘制一条线:

public Line CreateVerticalLine(Point startPoint, double height, double thickness)
{
    Line line = new Line();

    //technically, you don't need to specify 0 for these, but I'll leave them
    //here to be explicit about what's going on
    line.X1 = 0;
    line.Y1 = 0;
    line.X2 = 0;
    line.Y2 = height;

    Canvas.SetTop(line, startPoint.Y);
    Canvas.SetLeft(line, startPoint.X);

    line.StrokeThickness = thickness;

    return line;
}

注意,您可能希望使用Canvas.SetTopCanvas.SetLeft便捷方法,因为它们是类型安全的,并为您执行隐式类型转换。

另请注意,您可能需要重新考虑此问题。通过利用Canvas.Top/Left,在GridStackPanel或其他容器内设置时,您的线条无法正确绘制。你可以利用它的Margin,我认为这会有所帮助。但除非有特定的原因,你需要才能使用Canvas定位,我建议你坚持使用第一种方法并明确指定两个坐标。