私はこれに少し戸惑っていますが、マウスがグリッドにスナップすることに頭を悩ませようとする問題があります。現在、私はOnRender
そのようにオーバーライドしてグリッドを描いています。
protected override void OnRender(DrawingContext drawingContext)
{
int numberOfVerticalLines = 8;
int numberOfHorizontalLines = 8;
CellHeight = this.ActualHeight / numberOfVerticalLines;
CellWidth = this.ActualWidth / numberOfHorizontalLines;
double verticalOffset = 0;
double horizontalOffset = 0;
Pen pen = new Pen(Stroke, StrokeThickness);
pen.DashStyle = DashStyle;
for (int i = 0; i <= numberOfHorizontalLines; i++)
{
for (int j = 0; j <= numberOfVerticalLines; j++)
{
drawingContext.DrawLine(pen, new Point(horizontalOffset, verticalOffset), new Point(horizontalOffset, CellHeight + verticalOffset));
verticalOffset += CellHeight;
}
horizontalOffset += CellWidth;
verticalOffset = 0;
}
horizontalOffset = 0;
verticalOffset = 0;
for (int i = 0; i <= numberOfVerticalLines; i++)
{
for (int j = 0; j <= numberOfHorizontalLines; j++)
{
drawingContext.DrawLine(pen, new Point(horizontalOffset, verticalOffset), new Point(CellWidth + horizontalOffset, verticalOffset));
horizontalOffset += CellWidth;
}
verticalOffset += CellHeight;
horizontalOffset = 0;
}
}
そして、次の結果が得られます。
ただし、マウスを最も近いグリッドの交点 (水平線と垂直線が交わる場所) にスナップするためのルートを考えるのに少し苦労しています。明らかに、私は描画コンテキストを使用して線を描画しているので、描画された後はこれらの線を参照していません。
だから私は本質的に私の質問は、マウススナップをグリッドに実装するにはどうすればよいですか? これは、オブジェクト指向の制御に関する質問というよりも、数学に関する質問ですか? 関連するスタック オーバーフローの質問をほぼすべて読みましたが、まだ現実的なアイデアにたどり着くことができませんでした。
注: 現時点では 8x8 グリッドをハードコーディングしましたが、これは最終的にユーザー定義になります。