私は、コントロールのOnRenderメソッドをオーバーライドし、与えられたDrawingContextでDrawLineメソッドを呼び出すことによって、WPFで線を手動で描画しようとしています。私はこのメソッド呼び出しがすぐに線を描くわけではないことをどこかで読んだが、実際に線が現れるようにする方法を考えることはできない。WPFのカスタム線画
PathGeometry、LineSegments、Line、Polylineコントロールの組み合わせを試しました。私が望むものを描くことはできましたが、オフセットは正しくありませんでした(つまり、線を描くときには、ポリラインを描くときにすべてが間違ってオフセットされていました)。
これについてのアドバイスは素晴らしいと思います。
EDIT
ペンコード
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);
}
}
EDIT
レンダー3210テストプロジェクト:http://dl.dropbox.com/u/12763956/DrawingTest.zip (Visual Studioの2010年に書かれたテストプロジェクト)
使用法: - リストにポイントを追加するに隆起領域内で左クリック。 - 図面を終了してポイントをクリアするには、右クリックします。
注:(OnRenderのオーバーライドの)カスタム描画線は表示されません。
OnRenderで線を描くと、それらが表示されます。あなたが間違っていることが分かるようにサンプルコードを追加できますか? –
私が使っているレンダーコードを追加しました。 WPFコントロール内に含まれています。私はコントロール内とキャンバス要素でコンテンツを持たないようにしました。また、DrawLineへの呼び出しが実際にヒットしたことを確認するためにデバッグしました。 –
遅れて申し訳ありません - 私のバイクに乗っていました。あなたのコードは完璧に見えます。 Debug.WriteLineを使用して、線を描画する特定の点を取得できますか?範囲外の場合は、行は表示されません。 –