我正在尝试通过覆盖控件的OnRender方法并在给定的DrawingContext上调用DrawLine方法手动绘制WPF中的一条线。我在某个地方读到了这个方法调用不会立即绘制线条,但我无法弄清楚如何使其实际出现。
我尝试使用PathGeometry、LineSegments、Line和Polyline控件的组合。当我画线时,一切都很好,但是当我画折线时,所有东西都变得不正确偏移。
任何关于这个问题的建议都将非常有用。
编辑:
钢笔代码
我尝试使用PathGeometry、LineSegments、Line和Polyline控件的组合。当我画线时,一切都很好,但是当我画折线时,所有东西都变得不正确偏移。
任何关于这个问题的建议都将非常有用。
编辑:
钢笔代码
private static readonly Pen LinePen = new Pen(new SolidColorBrush(Colors.Green), 3.0d);
private static readonly Pen WayPointPen = new Pen(new SolidColorBrush(Colors.Gray), 3.0d);
渲染代码
protected override void OnRender(DrawingContext drawingContext)
{
// Draw way points
this.DrawWayPoints(drawingContext);
if (mDrawing)
{
// Draw current line
this.DrawCurrentLine(drawingContext);
}
}
private void DrawCurrentLine(DrawingContext context)
{
if(mStartPoint.HasValue && mEndPoint.HasValue)
{
// Draw the line
context.DrawLine(LinePen, mStartPoint.Value, mEndPoint.Value);
}
}
private void DrawWayPoints(DrawingContext context)
{
if (mWayPoints.Count < 2)
{
return;
}
// Draw all points
for (int i = 0; i < mWayPoints.Count - 1; i++)
{
var start = mWayPoints[i];
var end = mWayPoints[i + 1];
// Draw the line
context.DrawLine(WayPointPen, start, end);
}
}
编辑
测试项目:http://dl.dropbox.com/u/12763956/DrawingTest.zip (使用Visual Studio 2010编写)
使用方法: - 在凸起区域内左键单击以将点添加到列表中。 - 右键单击以结束绘制并清除点。
注意:自定义绘制的线条(在OnRender重写中)不会显示。