我对此有点困惑,但我有一个问题是试图让我的头绕着鼠标捕捉到网格。目前我正在通过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 网格,但这最终将由用户定义。