我想通過重寫控件的OnRender方法並在給定DrawingContext上調用DrawLine方法來手動在WPF中繪製一條線。我在某處讀到這種方法調用不會立即畫出線條,但我無法弄清楚如何真正引起線條出現。WPF中的自定義線條畫
我試過使用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覆蓋)不會出現。
我用OnRender畫線並出現。你可以添加示例代碼,以便我可以看到你做錯了什麼? –
我已經添加了我正在使用的呈現代碼。它包含在WPF控件中。我試過在控件和畫布元素中沒有內容。我也調試過,以確保對DrawLine的調用實際上被擊中,並且它們是。 –
抱歉延遲應答 - 在我的摩托車上關閉。你的代碼看起來非常好。你可以使用Debug.WriteLine來獲取你正試圖繪製線的特定點嗎?如果他們超出界限,則不會出現任何行。 –