我正在尝试在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);
由于
答案 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)
您不能,必须指定X1
,X2
,Y1
,Y2
。但是你可以创建帮助方法来帮助你:
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.Top
和Canvas.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.SetTop
和Canvas.SetLeft
便捷方法,因为它们是类型安全的,并为您执行隐式类型转换。
另请注意,您可能需要重新考虑此问题。通过利用Canvas.Top/Left
,在Grid
,StackPanel
或其他容器内设置时,您的线条无法正确绘制。你可以利用它的Margin
,我认为这会有所帮助。但除非有特定的原因,你需要才能使用Canvas定位,我建议你坚持使用第一种方法并明确指定两个坐标。