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